中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中怎么使用反射機制

發布時間:2021-07-19 17:43:26 來源:億速云 閱讀:227 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關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文件如下:

  1. std::map< string,ClassInfo*> DynBase::m_classInfoMap = 
    std::map< string,ClassInfo*>();  

  2. DynBase::DynBase()  

  3. {  

  4. }  

  5. DynBase::~DynBase()  

  6. {  

  7. }  

  8. bool DynBase::Register(ClassInfo* classInfo)  

  9. {   

  10. m_classInfoMap[classInfo->Type] = classInfo;   

  11. return true;   

  12. }  

  13. DynBase* DynBase::CreateObject(string type)  

  14. {  

  15. if ( m_classInfoMap[type] != NULL )   

  16. {   

  17. return m_classInfoMap[type]->Fun();  

  18. }  

  19. 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文件如下:

  1. ClassInfo* CIndustryOperate::m_cInfo = new ClassInfo
    ("IndustryOperate",(funCreateObject)( CIndustryOperate::
    CreateObject));  

  2. CIndustryOperate::CIndustryOperate()  

  3. {  

  4. }  

  5. CIndustryOperate::~CIndustryOperate()  

  6. {  

看完上述內容,你們對C++中怎么使用反射機制有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

巨鹿县| 鄂托克旗| 天门市| 青龙| 沙洋县| 固镇县| 葵青区| 湘乡市| 尚志市| 凌云县| 长顺县| 光泽县| 拜城县| 兴国县| 西安市| 长丰县| 鲁甸县| 博客| 闽侯县| 鄄城县| 楚雄市| 木里| 秀山| 民勤县| 白河县| 平利县| 岳池县| 自治县| 高雄市| 张掖市| 曲阜市| 上蔡县| 新民市| 钦州市| 舟山市| 大方县| 喀喇沁旗| 肥乡县| 西平县| 临夏市| 潜山县|