C 的類反射多型機制

2021-04-27 10:43:01 字數 1419 閱讀 9554

一、基類:

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