首先是要寫乙個類,這個類主要有2個功能,註冊類和通過類名獲取類例項的功能
typedef
map class_map;
typedef
void* (*createobject)(void);
//宣告
class classfactory
{public:
void register(const
string &name, createobject method);
void *getclassbyname(const
string &name);
private:
class_map m_classmap;
}
//定義
void* classfactory::getclassbyname(const string &name)
else
}void classfactory::register(const string &name, createobject method)
然後需要提供每個類註冊到class factory的巨集定義
class registerfunction
};#define classcreatobject(classname) \
void *create##classname()
#define registerclass(classname) \
registerfunction register##classaname(#classname,(createobject) create##classname)
最後在定義類的時候加上
classcreatobject(類名)
//這個巨集定義定義了乙個create 類指標的方法
registerclass(類名); // 根據上述的create類指標方法,將類物件register 到class factory中
最後的最後在使用的時候只需要,
getclassbyname(類索引)
c so 反射 C 實現反射機制
net下的很多技術都是基於反射機制來實現的,反射讓.net平台下的語言變得得心應手。最簡單的,比如列舉型別,我們我可以很容易的獲得乙個列舉變數的數值以及其名稱字串。可是,在c 中,列舉變數本質上和乙個整形變數沒有區別,我們很難獲取乙個列舉變數的名稱字串。其實在c 中,我們可以通過巨集來實現類似反射的...
c so 反射 c 實現反射機制
下午接了個阿里 面試,當時剛剛睡醒,感覺有點懵。大腦莫名當機狀態,很多問題沒有表述清楚,有乙個關於 c 如何實現反射機制的問題,感覺蠻有意思,當時雖然回答了用函式指標和工廠模式,但是表述並不當,細節也沒有想清楚。晚上抽空簡單實現了一發 file name reflector.cpp author x...
c so 反射 C 反射的方法與實現
1.什麼是反射?反射是程式獲取自身資訊的能力 2.反射有什麼用?可以用於動態建立型別,跨語言跨平台資料互動,持久化,序列化等等。3.反射包含哪些功能?至少包含以下功能 列舉所有member 獲取member的name和type 能夠get set member 4.有哪些反射方法?反射主要有3種實現...