您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關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++中怎么使用反射機制有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。