QT 元物件模擬實現

2021-07-27 09:29:56 字數 2135 閱讀 8768

1、qt元物件說明

qt 元物件q_object 類似mfc的型別識別,不同之處在於,型別識別使用mfc的巨集定義,依賴語言, 而qt是將元物件通過moc系統解析成中間檔案,模組之間通訊,可以包含相應的moc檔案,c++編譯moc,不同的moc儲存自己的qt物件資訊.

2、qt訊號槽使用原型

class object

;

在實際的使用中 需要解析此檔案,特別是要實現q_object。在本模擬中我們自己手動解析成最終檔案
3、qt元物件模擬實現

1、解析的類moc標頭檔案

#ifndef db_object  

#define db_object

#include

#define db_slots

#define db_signals protected

#define db_emit

#pragma once

class qobject;

//元物件系統 負責蒐集訊號與槽的名稱

struct metaobject

;//被連線物件資訊

struct connection

;//儲存訊號索引 與連線物件對映

typedef

std::multimap

connectionmap;

typedef

std::multimap

::iterator connectionmapit;

class qobject

;#endif

2、解析的類moc.cpp檔案

#include "stdafx.h"

#include "qobject.h"

static

const

char sig_names = "sig1\n";

static

const

char slts_names = "slot1\n";

metaobject qobject::meta = ;

qobject::qobject()

void qobject::sig1()

void qobject::slot1()

//啟用訊號

void qobject::metacall(int idx);}

static

int find_string(const

char * str, const

char * substr)

pos++;

}return -1;

}void qobject::db_connect(qobject* sender, const

char* sig, qobject* receiver, const

char* slt)

else ;

sender->connections.insert(std::pair(sig_idx, c));

}}void qobject::testsignal()

void metaobject::active(qobject* sender, int idx)

}

3、模擬使用

// testqobject.cpp : 定義控制台應用程式的入口點。

//模擬qt元物件系統

//參照qt訊號與槽實現原理

#include "stdafx.h"

#include "qobject.h"

#include

using

namespace

std;

//qobject 為解析後的檔案,qt的元物件系統預處理器叫做moc,我們自己手動解析了,

/* 在qt類似如下使用

class object;*/

# define slot(a) #a

# define signal(a) #a

int _tmain(int argc, _tchar* argv)

注:以上**引用

c 模擬實現物件池

怪物基類 pragma once 怪物列舉 enum monstertype class monster virtual monster 虛析構 monstertype gettype const private monstertype type 怪物型別 三個子類怪物 pragma once in...

JS模擬實現物件的深拷貝

1 js中淺拷貝與深拷貝對應,是由js的原始資料型別和引用資料型別決定的。2 對於原始型別資料,它的值存放在棧記憶體中,對於引用型別資料,它的棧中僅儲存了乙個資料存放的位址,真正的資料存放在堆記憶體中。3 當我們對原始型別資料進行賦值操作時,將棧記憶體中的值賦值給了被賦值物件,對被賦值物件進行運算並...

模擬實現Spring IOC

通過在類上標註 registration 註冊進容器,injection從容器注入物件 容器類 public class springcontainer else bean.setbeanclass c mappropsmap new hashmap 處理注入屬性 field props c.get...