日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

模拟标准c++中的Rtti

發布時間:2025/3/15 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟标准c++中的Rtti 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
delphi C# Java都有自己的Rtti,只有C++,它只是個標準,iso中沒有定義Rtti,只是各個廠商在自己的產品庫中加入了自己的Rtti,但不通用。下面的代碼來自網上,簡單實現了一個工廠方法。其實之前我也寫過一些關于C++的Rtti。不過這篇代碼思路比較好(Win7下運行有問題,沒有仔細調試)。 //?ConsoleDemo.cpp?:?定義控制臺應用程序的入口點。 //#include?"stdafx.h"#pragma?once #include?<map> #include?<string>using?namespace?std; class?DynBase; struct?ClassInfo; bool?Register(ClassInfo*?ci); typedef?DynBase*?(*funCreateObject)();//Assistant?class?to?create?object?dynamicly struct?ClassInfo { public:string?Type;funCreateObject?Fun;ClassInfo(string?type,?funCreateObject?fun){Type?=?type;Fun?=?fun;Register(this);} };//The?base?class?of?dynamic?created?class. //If?you?want?to?create?a?instance?of?a?class?,you?must?let //the?class?derive?from?the?DynBase. class?DynBase { public:static?bool?Register(ClassInfo*?classInfo);static?DynBase*?CreateObject(string?type);private:static?std::map<string,ClassInfo*>?m_classInfoMap;};std::map<?string,ClassInfo*>?DynBase::m_classInfoMap?=?std::map<?string,ClassInfo*>();bool?DynBase::Register(ClassInfo*?classInfo) {m_classInfoMap.insert(pair<?string,ClassInfo*>(classInfo->Type,classInfo));//m_classInfoMap[classInfo->Type]?=?classInfo;return?true; }DynBase*?DynBase::CreateObject(string?type) {if?(?m_classInfoMap[type]?!=?NULL?){return?m_classInfoMap[type]->Fun();}return?NULL; }bool?Register(ClassInfo*?ci) {return?DynBase::Register(ci); }class?DerivedClass?:?public?DynBase { public:virtual?~?DerivedClass?();DerivedClass?();static?DynBase*?CreateObject(){return?new?DerivedClass?();}private:static?ClassInfo*?m_cInfo; };DerivedClass::~?DerivedClass?() {//?ToDo:?Add?your?specialized?code?here?and/or?call?the?base?class }DerivedClass::?DerivedClass?() {}ClassInfo*?DerivedClass::m_cInfo?=?new?ClassInfo("DerivedClass",(funCreateObject)(?DerivedClass::CreateObject)); int?_tmain(int?argc,?_TCHAR*?argv[]) {DerivedClass?*?instance?=?(DerivedClass?*)DynBase::CreateObject("DerivedClass");//do?somethingsystem("pause");return?0;}

總結

以上是生活随笔為你收集整理的模拟标准c++中的Rtti的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。