精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Symbian開發總結--RTTI的實現及原理說明

移動開發
本文和大家學習一下Symbian開發總結RTTI的實現及原理說明,RTTI(運行時類型信息)是被現代高級編程語言所普遍支持的特性之一。

本文和大家重點學習一下Symbian開發總結--RTTI的實現及原理說明。RTTI(運行時類型信息)是被現代高級編程語言所普遍支持的特性之一,然而SymbianOSC++并不支持這個特性,這導致由Win32、JAVA轉向Symbian的開發人員或者代碼的移植都帶來很大的不便,本文將解決這個問題。

Symbian開發總結--RTTI的實現及原理說明

一、前言

  RTTI(運行時類型信息)是被現代高級編程語言所普遍支持的特性之一,如C#中的“aisA”、JAVA中的“ainstanceofA”都屬于RTTI的范疇。然而SymbianOSC++并不支持這個特性,這導致由Win32、JAVA轉向Symbian的開發人員或者代碼的移植都帶來很大的不便,本文將解決這個問題。
  
二、什么是RTTI

  Symbian開發中RTTI指的是“運行時類型識別(Run-TimeTypeIdentification)”或者“運行時類型信息(Run-TimeTypeInformation)”,程序能夠使用基類的指針或引用來檢查這些指針或引用所指的對象的實際派生類型。

  隨著應用場合之不同﹐所需支持的RTTI范圍也不同。最單純的RTTI包括:

  類識別(classidentification)──包括類名稱或ID。

  繼承關系(inheritancerelationship)──支持執行時期的“往下變換類型”(downwardcasting),亦即動態變換類型(dynamiccasting)。
  
三、Symbian開發中的RTTI

  由于Symbian系統以及它運行的硬件環境的限制,造成Symbian系統編程不能完全像一般C++程序設計隨心所欲,SymbianOSC++并不提供對RTTI的支持。所以,標準C++中的dynamic_cast<>、typeid()及type_info都是不被支持的。
  
四、移植MFC代碼實現RTTI

  Symbian開發中VC++編譯器從4.0版才開始支持RTTI,但MFC4.x并未使用編譯器的能力完成其對RTTI的支持。MFC有自己一套沿用已久的辦法(從1.0版就開始了)。在此,我們借用MFC中實現RTTI的代碼,來完成對SymbianOSC++RTTI的支持。

  關于MFC中RTTI的實現原理,侯捷的《深入淺出MFC》里已經有詳細的闡述,基本原理是使用幾個特殊的宏手動的在編譯期間確定一個對象繼承關系鏈表,在此不再說明具體原理。

我們移植的是VC++9.0中MFC實現RTTI的代碼,不使用侯捷在《深入淺出MFC》中所提供的模擬代碼。因為侯捷的代碼中存在非常多的“可寫的靜態數據”,將不能在SymbianDLL或者2nd版的APP中使用。然而,VC++9.0中的MFC代碼沒有存在以上問題,所以可以再任何Symbian代碼中使用。

  壓縮包內包含兩個文件:Rtti.h、Rtti.cpp。將這兩個文件加入工程后,著手設計實現RTTI的類:

  1、類的聲明:

  Rtti.h頭文件中的CRttiBase是擁有RTTI特性的基礎類,此類相當于MFC中的CObject,它繼承自CBase,所有要實現RTTI特性的類都要從此類派生,并且在聲明加入一個特殊的宏:
 

  1. class CMyClass : public CRttiBase    
  2.    {    
  3.  DECLARE_DYNAMIC(CMyClass)    
  4.    ...    
  5.   };    
  6.  

 

 

  注意:宏DECLARE_DYNAMIC中的第一個參數為當前類的類名:CMyClass。

  聲明第二個類繼承自CMyClass,同樣的,要加上DECLARE_DYNAMIC宏:
 

  1. 1 class CMyClass1 : public CMyClass  
  2. 2   {  
  3. 3 DECLARE_DYNAMIC(CMyClass1)  
  4. 4   ...  
  5. 5   };  

 

  注意:實現RTTI的子類繼承自父類,而父類必須繼承自CRttiBase。

  2、類的實現

  在CMyClass和CMyClass1的實現源文件分別加入以下兩行代碼:
 

  1. 1 IMPLEMENT_DYNAMIC(CMyClass, CRttiBase);  
  2. 2 IMPLEMENT_DYNAMIC(CMyClass1, CMyClass);  

 

宏IMPLEMENT_DYNAMIC中的第一個參數為當前子類型,第二個參數為直接父類型,如:CMyClass的直接父類為CRttiBase,CMyClass1的直接父類為CMyClass。

  3、使用RTTI特性

  通過以上簡單兩個步驟,我們就能使用RTTI特性了,完整代碼:
 

  1. 1 class CMyClass : CRttiBase  
  2.  2   {  
  3.  3 DECLARE_DYNAMIC(CMyClass)  
  4.  4   };  
  5.  5   
  6.  6 class CMyClass1 : CMyClass  
  7.  7   {  
  8.  8 DECLARE_DYNAMIC(CMyClass1)  
  9.  9   };  
  10. 10   
  11. 11 class CMyClass2 : CRttiBase  
  12. 12   {  
  13. 13 DECLARE_DYNAMIC(CMyClass2)  
  14. 14   };  
  15. 15   
  16. 16 IMPLEMENT_DYNAMIC(CMyClass, CRttiBase);  
  17. 17 IMPLEMENT_DYNAMIC(CMyClass1, CMyClass);  
  18. 18 IMPLEMENT_DYNAMIC(CMyClass2, CRttiBase);  
  19. 19   
  20. 20 LOCAL_C void MainL()  
  21. 21   {  
  22. 22   CMyClass1* mc1 = new (ELeave) CMyClass1;  
  23. 23   TBool a = mc1->IsKindOf(RUNTIME_CLASS(CMyClass));  
  24. 24   TBool b = mc1->IsKindOf(RUNTIME_CLASS(CRttiBase));  
  25. 25   TBool c = mc1->IsKindOf(RUNTIME_CLASS(CMyClass2));  
  26. 26   }  

 

  從代碼中可以看出CMyClass1的父類為CMyClass,CMyClass的父類為RTTI基類CRttiBase,而CMyClass2的基類也為CRttiBase,CMyClass1和CMyClass2沒有繼承關系。

  所以,代碼第23至25行,abc的值依次為true、true、false。

  CRttiBase::IsKindOf方法類似于C#中的“is”關鍵字、JAVA中的“instanceof”關鍵字,傳入的是某個類的運行時信息,而宏“RUNTIME_CLASS”獲取的是某個類的運行時信息“CRuntimeClass”。

   4、運行時信息

  “運行時信息”結構體CRuntimeClass在創建時將類的信息保存以便程序運行時查閱,其中包括類名、類大小、父類信息等。這些信息在宏IMPLEMENT_DYNAMIC內部,在程序編譯的時候就已經確定:
 

  1. 1 struct CRuntimeClass  
  2.  2   {  
  3.  3   const char* iClassName;  
  4.  4   TInt iObjectSize;  
  5.  5   TUint iSchema;   
  6.  6   CRttiBase* (*iCreateObjectProc)();   
  7.  7   CRuntimeClass* iBaseClass;  
  8.  8   CRttiBase* CreateObject();  
  9.  9   TBool IsDerivedFrom(const CRuntimeClass* aBaseClass) const;  
  10. 10   CRuntimeClass* iNextClass;  
  11. 11   };  

 

  注:CRuntimeClass可以理解為C#中的System.Type類型。

  5、Symbian開發中獲取類和對象的運行時信息

  獲取類的運行時信息使用宏RUNTIME_CLASS,如:


CRuntimeClass* classType = RUNTIME_CLASS(CMyClass);

  注:以上代碼可以理解為C#中的“TypeclassType=typeof(CTestClass);”方法取類的類型信息。

  獲取對象的運行時信息使用CRttiBase::GetRuntimeClass()方法,如:


  CMyClass1* mc1 = new (ELeave) CMyClass1;
  CRuntimeClass* rc = mc1->GetRuntimeClass();

注:以上代碼可以理解為C#中的“TypeclassType=theClass.GetType();”方法取對象的類型信息。

  兩種方法均返回CRuntimeClass*。

  6、通過運行時信息動態創建對象

  大家可能會注意到CRuntimeClass有一個方法叫“CreateObject”,此方法能夠通過運行時信息動態的創建對象。這在某些實現比較復雜的功能往往是很有必要的。如:

  有一個工廠,能夠生產不同的零件,而能夠生產的零件的類型是多種多樣的。

  在沒有實現RTTI之前,我們可能會在工廠方法里寫一個很大的case語句,針對不同的零件類型進行判斷從而調用不同類的構造函數。

  而實現了RTTI后,我們只需要保持一個零件類型和CRuntimeClass之間的哈希表,在工廠方法中向哈希表傳入零件類型,找到CRuntimeClass后調用CRuntimeClass::CreateObject()方法即可。

  要實現動態創建對象,必須把函數聲明中的DECLARE_DYNAMIC改為DECLARE_DYNCREATE,把IMPLEMENT_DYNAMIC改為IMPLEMENT_DYNCREATE即可。如:
 

  1. 1 class CMyClass : CRttiBase  
  2. 2   {  
  3. 3 DECLARE_DYNCREATE(CMyClass)  
  4. 4   };  
  5. 5   
  6. 6 IMPLEMENT_DYNCREATE(CMyClass, CRttiBase);  

 

  這樣,CMyClass的類型信息就能夠提供動態創建對象的功能了。
  
五、注意事項

  CRttiBase是實現了對RTTI特性支持的父類,系統本身沒有提供對RTTI的支持。所以,要實現RTTI的類必須直接或間接的繼承自CRttiBase,這通常會對我們的設計造成很大的影響。如:如果一個類為活動對象,繼承自CActive,它又要實現RTTI特性,顯然以下聲明是錯誤的,因為CActive與CRttiBase都繼承自CBase:

class CMyActiveObject: public CActive, public CRttiBase {...}

  在此有兩種方法解決:

  采用Wrapper模式,封裝CActive并導出接口

  通過修改rtti.h,使CRttiBase不繼承自CBase,每個基于RTTI的類都手動的指定基類CBase或其它,然后使用C++多重繼承的支持實現類的設計。
  
六、參考文獻

  深入淺出MFC,侯捷

  如何在運行時確定對象類型(RTTI)

  SymbianOSC++高效編程

 

責任編輯:佚名 來源: 博客園
相關推薦

2020-10-23 18:46:58

C++程序類別

2010-07-12 09:34:59

Symbian開發

2010-02-01 14:33:05

C++實現RTTI

2010-07-02 09:54:32

Symbian開發

2010-07-22 09:25:21

Symbian開發

2010-04-22 11:42:44

Symbian開發

2010-01-21 15:07:31

C++開發

2023-10-18 08:12:34

Spring自動配置

2011-06-16 16:21:06

Qt Symbian FAQ

2022-03-17 08:55:43

本地線程變量共享全局變量

2025-05-27 01:00:00

2010-07-12 09:43:38

Symbian開發

2010-04-12 11:35:38

Symbian開發

2010-05-22 10:38:15

Symbian開發

2015-03-10 13:55:31

JavaScript預解析原理及實現

2019-03-25 15:14:19

Flutter馬蜂窩開發

2010-09-07 17:27:54

Carbide.c++Symbian移動開發

2011-06-16 15:17:16

2010-06-22 10:01:40

Symbian開發

2017-02-06 19:26:15

iOSCFArray開源
點贊
收藏

51CTO技術棧公眾號

久久久精品国产| 色老汉一区二区三区| 高清免费日韩| 日本视频在线观看免费| 成人羞羞视频播放网站| 欧美一区永久视频免费观看| 成人性生活视频免费看| 国产在线中文字幕| 国产一区二区在线电影| 97欧美精品一区二区三区| 精品无码国产污污污免费网站| 57pao成人永久免费| 五月婷婷综合激情| 一区国产精品| 欧美视频综合| 高清不卡在线观看| 国产精品看片资源| 国产真实夫妇交换视频| 日韩国产在线| 精品无人区乱码1区2区3区在线| 精品久久久99| 美女福利一区二区| 亚洲综合在线五月| 亚洲一区二区免费视频软件合集| 欧美在线 | 亚洲| 麻豆成人91精品二区三区| 91wwwcom在线观看| 久草资源在线视频| 91日韩免费| 国产亚洲欧洲在线| 中文字幕一区三区久久女搜查官| 2019中文亚洲字幕| 欧美天堂一区二区三区| 成年人午夜免费视频| 国产午夜精品久久久久免费视| 91理论电影在线观看| 成人黄色片视频网站| 特级西西444| chinese少妇国语对白| av在线天堂播放| 91麻豆蜜桃一区二区三区| 96成人在线视频| 91久久精品无码一区二区| 丝袜美腿亚洲综合| 2020久久国产精品| 日韩黄色一级大片| 影音国产精品| 久久99国产精品久久久久久久久| 欧美美女性生活视频| 日韩欧美中字| 综合国产在线视频| 国产性猛交xx乱| 国产亚洲一区| 国产一区二区三区在线免费观看| 麻豆av免费观看| 日本天堂一区| 亚洲精品一区二区三区不| 亚洲中文字幕无码av| 超碰成人97| 精品久久久久久久久久久院品网 | 最新av电影网站| 97精品在线| 久久精品国产欧美激情| 久久久久人妻一区精品色| 欧美r级电影| 日韩中文字幕不卡视频| 永久免费未视频| 女人天堂亚洲aⅴ在线观看| 久久久国产成人精品| 农村黄色一级片| 国产精品99免费看| 韩国精品美女www爽爽爽视频| 亚洲国产精一区二区三区性色| 亚洲精品免费观看| 国产91精品不卡视频| 亚洲国产成人精品女人久久| 日产欧产美韩系列久久99| 国产欧美一区二区三区久久人妖| 99热这里只有精品66| 国产精品一二三区| 国产在线精品二区| 国产一区精品| 亚洲欧美另类久久久精品2019| www国产无套内射com| 涩涩涩视频在线观看| 欧美亚洲一区二区在线观看| 色18美女社区| 国产精品一区二区三区美女| 亚洲欧美第一页| 中国美女黄色一级片| 午夜日本精品| 日产精品99久久久久久| 伊人久久亚洲综合| 风间由美性色一区二区三区 | 天天综合国产| 欧美精品第一页在线播放| 亚洲第一网站在线观看| 黑人巨大精品欧美一区| 国产伦精品一区二区三区视频孕妇| 国产又爽又黄网站亚洲视频123| 国产亚洲精品中文字幕| 亚洲国产一二三精品无码| 最新欧美色图| 日韩欧美一区电影| 日本乱子伦xxxx| 欧美激情在线| 国产精品亚洲аv天堂网| 亚洲精品一区二区三区区别| 中文字幕av一区二区三区高| 国产二区视频在线| 日本一区二区三区中文字幕 | 国产免费av高清在线| 亚洲男女毛片无遮挡| 黄色片一级视频| 亚洲综合色婷婷在线观看| 在线观看欧美www| 亚洲精品午夜国产va久久成人| 国产一区在线看| 日本一区二区久久精品| 国产v日韩v欧美v| 91精品视频网| 国产破处视频在线观看| 亚洲一区激情| 成人蜜桃视频| 精品欧美色视频网站在线观看| 欧美小视频在线观看| 99久久久无码国产精品性波多| 久久中文亚洲字幕| 国产成人精品日本亚洲专区61| 日本高清视频网站| 亚洲精品久久久蜜桃| 一区二区三区 欧美| 影视先锋久久| 97免费在线视频| 你懂的网站在线| 亚洲欧美日韩中文播放| 亚洲免费成人在线视频| 日韩精品网站| 国产精品一区二区性色av| 韩国福利在线| 色婷婷av一区二区三区软件| www.超碰97| 日韩图片一区| 精品国产区在线| 国产福利片在线观看| 亚洲精品一区二区三区99| 欧美成人片在线观看| 国产精品一区二区果冻传媒| 精品少妇人妻av一区二区| 日韩一级视频| 自拍偷拍免费精品| 国产又粗又猛又爽又黄的视频一 | 秋霞国产精品| 亚洲人成欧美中文字幕| 日韩久久中文字幕| www国产成人免费观看视频 深夜成人网| 国产小视频免费| 超碰精品在线| 51色欧美片视频在线观看| 天天射,天天干| 欧美日韩另类在线| 三上悠亚ssⅰn939无码播放| 久久这里只有| 一区二区三区四区五区视频| 99视频这里有精品| 欧美国产第二页| 日本黄视频在线观看| 欧美日韩国产页| 谁有免费的黄色网址| 卡一卡二国产精品 | 中文字幕人妻一区二区三区在线视频| 久久九九免费| 中文字幕剧情在线观看一区| 日韩精品视频一区二区三区| 性欧美xxxx交| 国产51人人成人人人人爽色哟哟| 欧美精品丝袜久久久中文字幕| 日韩a级片在线观看| 99久久国产综合色|国产精品| 蜜臀av午夜一区二区三区 | 天堂а√在线中文在线| 99国产精品免费网站| 国产97在线播放| 成人黄色在线电影| 亚洲精品98久久久久久中文字幕| 亚洲精品毛片一区二区三区| 亚洲人吸女人奶水| 国产美女视频免费观看下载软件| 日韩国产欧美在线观看| 大桥未久一区二区| 另类在线视频| 国产精选久久久久久| 8x8ⅹ拨牐拨牐拨牐在线观看| 亚洲色图日韩av| 99热这里只有精品在线| 色综合久久久久综合99| 国产极品国产极品| 国产日本亚洲高清| 国产成人精品综合久久久久99| 亚洲综合99| 91免费视频黄| 久久爱www成人| 翡翠波斯猫1977年美国| 影音成人av| 久久久久亚洲精品成人网小说| 欧美中文在线| 精品乱人伦小说| 中文字幕在线观看1| 天天亚洲美女在线视频| 久久av红桃一区二区禁漫| 久久众筹精品私拍模特| 三级网站免费看| 日本少妇一区二区| 日本欧美黄色片| 欧美在线日韩| 亚洲欧洲一区二区| 亚洲免费成人av在线| 国产91aaa| 91成人短视频在线观看| 国产精品激情自拍| 在线视频超级| 韩国福利视频一区| 日本动漫理论片在线观看网站| 日韩中文在线视频| eeuss影院www在线播放| 亚洲理论在线a中文字幕| 高清乱码毛片入口| 91精品免费在线| 国产又粗又猛又爽又黄91| 在线观看91视频| 一本一道无码中文字幕精品热| 亚洲国产成人tv| 色在线观看视频| 一区在线播放视频| 国产白丝一区二区三区| 国产人伦精品一区二区| 娇妻被老王脔到高潮失禁视频| 99riav久久精品riav| 国产精品一级无码| 国产成人精品免费一区二区| 巨乳女教师的诱惑| 国产激情精品久久久第一区二区| 女同激情久久av久久| 另类中文字幕网| 欧美成人三级在线播放| 美女国产一区二区| 日日噜噜夜夜狠狠| 久久草av在线| 九九精品久久久| 国产在线国偷精品免费看| 亚洲色图偷拍视频| 黑人巨大精品欧美黑白配亚洲| 日本一二三区在线| 国产福利精品一区| yjizz视频| 91在线国内视频| 91中文字幕永久在线| 亚洲国产成人自拍| 亚洲精品久久久久久国| 亚洲欧美日韩在线播放| 久久精品视频日本| 精品久久久久久久久中文字幕| 五月天激情四射| 欧美视频在线一区二区三区| 国产又粗又猛又爽又黄的| 日韩一区二区三区视频在线| 欧美77777| 亚洲欧美成人一区二区在线电影| 第九色区av在线| 久久精品中文字幕一区| 三级资源在线| 96精品视频在线| 深夜视频一区二区| 成人免费网站在线| 国产精品香蕉| 水蜜桃亚洲精品| 欧美激情一级片一区二区| www.中文字幕在线| 免费高清不卡av| 风韵丰满熟妇啪啪区老熟熟女| 91在线视频免费观看| 国产精品酒店视频| 亚洲第一主播视频| 九九热最新视频| 日韩精品一区二区三区四区 | 成人短视频软件网站大全app| 91日韩久久| 精品国产一区二区三区四区| 亚洲一区二区在线观| 在线国产欧美| 一区二区三区国产免费| 国产不卡高清在线观看视频| 亚洲无人区码一码二码三码的含义 | 色婷婷综合久久久久中文一区二区| 亚洲综合成人av| 精品国产三级a在线观看| 丁香在线视频| 国模精品系列视频| 黄色成人小视频| 久久影视中文粉嫩av| 国产精品久久占久久| 日本久久久精品视频| 国产尤物一区二区| 日本黄色小视频在线观看| 亚洲高清一区二区三区| 亚洲一区精品在线观看| 日韩av在线一区| 2024最新电影免费在线观看| 国产成人小视频在线观看| 国产伦乱精品| 久久av秘一区二区三区| 天堂久久一区二区三区| 午夜剧场免费看| 亚洲视频一区二区在线| 中文字幕在线日本| 日韩av在线直播| 亚洲综合影视| 国产在线久久久| 欧美日韩伦理| 欧美女人性生活视频| 成人免费va视频| 欧美黄色一级网站| 欧美福利视频一区| 日本在线www| 国产精品盗摄久久久| 免费毛片在线不卡| 两根大肉大捧一进一出好爽视频| 粉嫩在线一区二区三区视频| 日韩一级片av| 91麻豆精品91久久久久同性| www.av在线| 国产精品jizz在线观看麻豆| 综合亚洲色图| 成人在线免费观看av| 色帝国亚洲欧美在线| 激情久久久久久| 少妇高清精品毛片在线视频| 91丝袜美腿高跟国产极品老师 | 韩国三级hd中文字幕有哪些| 亚洲欧美一区二区在线观看| 伊人网视频在线| 中文字幕日韩专区| 成人全视频免费观看在线看| 亚洲bbw性色大片| 欧美aaaaaa午夜精品| 国产三级短视频| 欧美私人免费视频| 午夜在线小视频| 成人精品网站在线观看| 久久久久久久久国产一区| 五月天婷婷影视| 一区二区三区在线播放| 高清一区二区三区四区| 欧美极品xxxx| 精品视频高潮| 成人在线激情网| 欧美国产一区视频在线观看| 亚洲天堂999| 欧美成人精品一区二区| 999在线精品| 女人扒开屁股爽桶30分钟| 久久精品亚洲精品国产欧美kt∨| 国产精品第6页| www亚洲欧美| 91精品丝袜国产高跟在线| 男女激情无遮挡| 久久久精品人体av艺术| 日本一区二区三区久久| 不卡av在线网站| 99精品中文字幕在线不卡| 色综合久久久久无码专区| 国产三级欧美三级日产三级99| 怡春院在线视频| 欧美理论电影在线播放| 久久久亚洲欧洲日产| 欧美精品性生活| 一区二区三区在线免费播放| 日本人妖在线| 国产综合久久久久久| 狠狠噜噜久久| 免费看污片的网站| 欧美一区二区在线观看| 人成在线免费网站| 一区二区精品免费视频| 丁香五精品蜜臀久久久久99网站| 在线观看黄网站| 久久精品国产69国产精品亚洲| 给我免费播放日韩视频| 九九热免费精品视频| 一区二区三区成人在线视频| 黄色片免费在线| 91久久大香伊蕉在人线| 老司机午夜精品视频| 日韩成人短视频| 亚洲欧美色婷婷| 久久视频社区| 九色porny91| 亚欧色一区w666天堂| 欧美性天天影视| 久久国产精品久久|