一、基類:
class icmdstatic
;二、子類1:
class ccmd502 : public icmdstatic;};
三、子類2:
class ccmd503 : public icmdstatic;};
四、類工廠模板標頭檔案:
#ifndef genericfactoryh
#define genericfactoryh
#include
#include
using namespace std;
#define register_class(base_class, derived_class) registerinpfactoryregister##derived_class(#derived_class)
#define create_class(base_class, derived_class) genericfactory::instance().create(derived_class)
template
class genericfactory
genericfactory(const genericfactory&) {} // 沒有實現
genericfactory &operator=(const genericfactory&) {} // 沒有實現
public:
static genericfactory& instance()
void regcreatefn(const classidkey &classname, basecreatefn fn)
manufacturedtype* create(const classidkey &classname) const
return theobject;}};
template
class registerinpfactory
registerinpfactory(const classidkey &id)
};#endif
五、呼叫者**:
1、初始化**:
register_class(icmdstatic,ccmd502);
register_class(icmdstatic,ccmd503);
2、呼叫**:
icmdstatic* pbase=null;
uint iret=0;
pbase=create_class(icmdstatic,"ccmd502");
if(pbase)
pbase=create_class(icmdstatic,"ccmd503");
if(pbase)
總結:這也許是c++能做到的反射多型機制的最高境界了,因為遺憾的是初始化**必須在每次發布乙個新的子類時進行更改,這與真正的反射類工廠稍有差距!!!
反射機制傳遞類
鑑於某人說delphi的反射不能傳入或傳出類,我在此糾正一下這個說法,下面的 可以證實,類可以傳入傳出。由於我已經把d2009的反射單元移去d2007,因此就不用d2009了,所以 中暫時不考慮unicode的問題。unit unit1 inte ce uses windows,messages,s...
C 的反射機制
type type cassembly.assembly.gettype moduleclass object params new object 3 params 0 modulecode params 1 titlefront modulename params 2 e no igeneraht...
C 反射機制
反射的概述 反射的定義 審查元資料並收集關於它的型別資訊的能力。元資料 編譯以後的最基本資料單元 就是一大堆的表,當編譯程式集或者模組時,編譯器會建立乙個類定義表,乙個字段定義表,和乙個方法定義表等。system.reflection命名空間包含的幾個類,允許你反射 解析 這些元資料表的 syste...