C++編程語言是一款功能強大的計算機應用語言。其能夠支持很多程序設計風格。我們今天將會在這裡為大家詳細介紹一下有關C++反射機制的具體實現步驟,大家可以從中獲得一些有幫助的內容。
在Java編程中,我們經常要用到反射,通過反射機制實現在配置文件中的靈活配置, 但在C++編程中,對這種方式步提供現有的支持,那麼我們怎麼才能在配置文件中配置想要調用的對象呢?
我們的思路是通過對象名稱確定對象實例,把對象名和對象實例通過哈希表進行映射,那麼我們就可以實現通過對象名稱獲取對象了。首先定義一個C++反射機制的結構:
- struct ClassInfo
- {
- public:
- string Type;
- funCreateObject Fun;
- ClassInfo(string type, funCreateObject fun)
- {
- Type = type;
- Fun = fun;
- Register(this);
- }
- };
其中Register這樣定義
- bool Register(ClassInfo* ci);
然後定義一個類,頭文件如下:
- class AFX_EXT_CLASS DynBase
- {
- public:
- DynBase();
- virtual ~DynBase();
- public:
- static bool Register(ClassInfo* classInfo);
- static DynBase* CreateObject(string type);
- private:
- static std::map<string,ClassInfo*> m_classInfoMap;
- };
cpp文件如下:
- std::map< string,ClassInfo*> DynBase::m_classInfoMap =
std::map< string,ClassInfo*>();- DynBase::DynBase()
- {
- }
- DynBase::~DynBase()
- {
- }
- bool DynBase::Register(ClassInfo* 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;
- }
那麼我們在C++反射機制的操作中實現映射的類只要繼承於DynBase就可以了,比如由一個類CIndustryOperate
頭文件如下
- class CIndustryOperate : public DynBase
- {
- public:
- CIndustryOperate();
- virtual ~CIndustryOperate();
- static DynBase* CreateObject(){return new CIndustryOperate();}
- private:
- static ClassInfo* m_cInfo;
- };
cpp文件如下:
- ClassInfo* CIndustryOperate::m_cInfo = new ClassInfo
("IndustryOperate",(funCreateObject)( CIndustryOperate::
CreateObject));- CIndustryOperate::CIndustryOperate()
- {
- }
- CIndustryOperate::~CIndustryOperate()
- {
- }
以上就是我們為大家詳細介紹的C++反射機制的實現方法。