日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

模拟标准c++中的Rtti

發(fā)布時(shí)間:2025/3/15 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟标准c++中的Rtti 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
delphi C# Java都有自己的Rtti,只有C++,它只是個(gè)標(biāo)準(zhǔn),iso中沒有定義Rtti,只是各個(gè)廠商在自己的產(chǎn)品庫中加入了自己的Rtti,但不通用。下面的代碼來自網(wǎng)上,簡(jiǎn)單實(shí)現(xiàn)了一個(gè)工廠方法。其實(shí)之前我也寫過一些關(guān)于C++的Rtti。不過這篇代碼思路比較好(Win7下運(yùn)行有問題,沒有仔細(xì)調(diào)試)。 //?ConsoleDemo.cpp?:?定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。 //#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;}

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。