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...