參考:
本文的實現基於上述部落格中的**修改而來。
本文實現的反射機制,其實就是根據字串,構造乙個類物件
classinfo是記錄類名與其相應的工廠函式
dynbase是實現反射機制的公共基類,每個繼承它的子類需要在建構函式中傳遞其類名的字串給dynbase的建構函式
templateclass dynbase;
templateclass classinfo
};templateclass dynbase
; static bool register(std::string type);
static dynbase* createobject(std::string type);
static dynbase* createobject();
private:
static std::map*> m_classinfomap;
};
呼叫的時候如下
class cindustry : public dynbase;
cindustry* pcindustry = dynamic_cast(dynbase::createobject("cindustry"));
總結:本文中採用模板的實現方式,與參考文章中的實現方式相比,優點是在使用過程中子類不需要含有其它多餘的成員,只需在建構函式處傳遞類名字串;缺點是會生成比較多的**,有沒有更好的方法呢?如果你看到這裡,請不吝賜教!!
下面幾個網頁也很不錯
C 反射機制
反射的概述 反射的定義 審查元資料並收集關於它的型別資訊的能力。元資料 編譯以後的最基本資料單元 就是一大堆的表,當編譯程式集或者模組時,編譯器會建立乙個類定義表,乙個字段定義表,和乙個方法定義表等。system.reflection命名空間包含的幾個類,允許你反射 解析 這些元資料表的 syste...
C 反射機制
反射的定義 審查元資料並收集關於它的型別資訊的能力。元資料 編譯以後的最基本資料單元 就是一大堆的表,當編譯程式集或者模組時,編譯器會建立乙個類定義表,乙個字段定義表,和乙個方法定義表等。system.reflection命名空間包含的幾個類,允許你反射 解析 這些元資料表的 system.refl...
C 反射機制
一 反射的定義 審查元資料並收集關於它的型別資訊的能力。元資料 編譯以後的最基本資料單元 就是一大堆的表,當編譯程式集或者模組時,編譯器會建立乙個類定義表,乙個字段定義表,和乙個方法定義表等。system.reflection命名空間包含的幾個類,允許你反射 解析 這些元資料表的 system.re...