亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

武鸣县| 青神县| 虞城县| 旅游| 新津县| 莒南县| 桐城市| 东乡| 天峨县| 福清市| 沙雅县| 泰州市| 山丹县| 百色市| 施秉县| 白河县| 山东| 克什克腾旗| 合川市| 毕节市| 平顺县| 吉安市| 汝阳县| 营口市| 嘉定区| 容城县| 徐水县| 资中县| 永春县| 隆林| 靖远县| 镇康县| 峡江县| 迁安市| 祁东县| 调兵山市| 称多县| 中方县| 东乡族自治县| 米脂县| 临泉县|