日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
C++反射機制具體實現(xiàn)方法詳解

C++編程語言是一款功能強大的計算機應用語言。其能夠支持很多程序設計風格。我們今天將會在這里為大家詳細介紹一下有關C++反射機制的具體實現(xiàn)步驟,大家可以從中獲得一些有幫助的內容。

創(chuàng)新互聯(lián)于2013年創(chuàng)立,是專業(yè)互聯(lián)網技術服務公司,擁有項目成都網站建設、成都網站制作網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元都江堰做網站,已為上家服務,為都江堰各地企業(yè)和個人服務,聯(lián)系電話:18980820575

在Java編程中,我們經常要用到反射,通過反射機制實現(xiàn)在配置文件中的靈活配置, 但在C++編程中,對這種方式步提供現(xiàn)有的支持,那么我們怎么才能在配置文件中配置想要調用的對象呢?

我們的思路是通過對象名稱確定對象實例,把對象名和對象實例通過哈希表進行映射,那么我們就可以實現(xiàn)通過對象名稱獲取對象了。首先定義一個C++反射機制的結構:

 
 
 
  1. struct ClassInfo
  2. {
  3. public:
  4. string Type;
  5. funCreateObject Fun;
  6. ClassInfo(string type, funCreateObject fun)
  7. {
  8. Type = type;
  9. Fun = fun;
  10. Register(this);
  11. }
  12. };

其中Register這樣定義

 
 
 
  1. bool Register(ClassInfo* ci);

然后定義一個類,頭文件如下:

 
 
 
  1. class AFX_EXT_CLASS DynBase 
  2. {
  3. public:
  4. DynBase();
  5. virtual ~DynBase();
  6. public: 
  7. static bool Register(ClassInfo* classInfo);
  8. static DynBase* CreateObject(string type);
  9. private: 
  10. static std::map m_classInfoMap;
  11. };

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. m_classInfoMap[classInfo->Type] = classInfo; 
  10. return true; 
  11. }
  12. DynBase* DynBase::CreateObject(string type)
  13. {
  14. if ( m_classInfoMap[type] != NULL ) 
  15. return m_classInfoMap[type]->Fun();
  16. }
  17. return NULL;
  18. }

那么我們在C++反射機制的操作中實現(xiàn)映射的類只要繼承于DynBase就可以了,比如由一個類CIndustryOperate

頭文件如下

 
 
 
  1. class CIndustryOperate : public DynBase
  2. {
  3. public:
  4. CIndustryOperate();
  5. virtual ~CIndustryOperate();
  6. static DynBase* CreateObject(){return new CIndustryOperate();}
  7. private:
  8. static ClassInfo* m_cInfo;
  9. };

cpp文件如下:

 
 
 
  1. ClassInfo* CIndustryOperate::m_cInfo = new ClassInfo
    ("IndustryOperate",(funCreateObject)( CIndustryOperate::
    CreateObject));
  2. CIndustryOperate::CIndustryOperate()
  3. {
  4. }
  5. CIndustryOperate::~CIndustryOperate()
  6. {
  7. }

以上就是我們?yōu)榇蠹以敿毥榻B的C++反射機制的實現(xiàn)方法。


當前標題:C++反射機制具體實現(xiàn)方法詳解
網站URL:http://www.dlmjj.cn/article/coigose.html