精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲成人av免费观看| 北条麻妃高清一区| av网站有哪些| 456成人影院在线观看| 国产欧美一区视频| 91九色国产视频| 国产精品18p| 天堂在线精品| 欧美日韩国产精品自在自线| 懂色av粉嫩av蜜臀av| 国产自产一区二区| 久久婷婷激情| 久久久99久久精品女同性| 国产调教打屁股xxxx网站| 国产伦久视频在线观看| 中文字幕免费观看一区| 99久久精品无码一区二区毛片 | 国产日韩亚洲欧美综合| 国产日韩在线看片| 日韩成人免费在线视频| 精品日本12videosex| 欧美草草影院在线视频| 91色国产在线| av资源新版天堂在线| 国产欧美一区二区在线| 成人免费在线看片| 波多野结衣绝顶大高潮| 黄色成人在线网址| 亚洲视频在线免费观看| 精品国产免费久久久久久婷婷| 三上悠亚激情av一区二区三区| 亚洲男人的天堂av| 色噜噜狠狠一区二区三区| 人妻无码中文字幕免费视频蜜桃| 免费在线观看一区二区三区| 97人人做人人爱| 国产极品国产极品| 成人亚洲一区二区| 日韩精品免费看| 亚洲精品久久久久久| 秋霞国产精品| 欧美三级欧美成人高清www| 400部精品国偷自产在线观看| 麻豆导航在线观看| 成人免费毛片app| 国产精品综合不卡av| 无码人妻丰满熟妇区bbbbxxxx| 尤物在线精品| 欧美老少做受xxxx高潮| 很污很黄的网站| 网友自拍一区| 日韩av网站在线| 国产乱淫av片| 一区二区网站| 欧美一区二区私人影院日本| 一区二区免费av| 日韩一区二区三区在线免费观看 | 精品国产一区二区三区四区四| 午夜精品久久久久久久99热影院| 欧美极品免费| 色噜噜狠狠一区二区三区果冻| 精品久久久久久久久久中文字幕| wwww亚洲| 亚洲成人精品一区| 男人天堂a在线| 秋霞在线午夜| 夜夜爽夜夜爽精品视频| 超级碰在线观看| 18网站在线观看| 亚洲免费观看高清在线观看| 乱子伦一区二区| 国产精品扒开做爽爽爽的视频| 国产欧美一区二区三区网站| 色就是色欧美| 欧美三级黄网| 亚洲视频一区二区免费在线观看| 中文字幕精品—区二区日日骚| 黄网页免费在线观看| 亚洲色图一区二区三区| 久久久99精品视频| 9765激情中文在线| 日韩欧美第一页| 最新中文字幕2018| 亚洲狼人在线| 日韩一级精品视频在线观看| 久久人妻少妇嫩草av蜜桃| 欧美男人操女人视频| 国产丝袜精品第一页| 69精品无码成人久久久久久| 色欧美自拍视频| 欧美刺激性大交免费视频| 久久久久久久久久久久久久免费看 | 怡红院一区二区| 欧美精品中文| 中国日韩欧美久久久久久久久| fc2ppv在线播放| 红桃视频亚洲| 国产成人欧美在线观看| 国产精品爽爽久久久久久| 国产成人免费在线视频| 久久伊人资源站| 成年人视频网站在线| 亚洲人亚洲人成电影网站色| 青青草视频在线免费播放| 性高爱久久久久久久久| 日韩限制级电影在线观看| 日本黄色免费观看| 成人3d精品动漫精品一二三| 欧美另类xxx| 黄色片网站在线免费观看| 激情久久久久久久久久久久久久久久| 成人动漫视频在线观看免费| 国自产拍在线网站网址视频| 一区二区三区欧美久久| 亚洲精品乱码久久久久久自慰| 99久热在线精品视频观看| 日韩av在线免费播放| 无码黑人精品一区二区| 亚洲免费影院| 99se婷婷在线视频观看| 高清毛片在线看| 亚洲va中文字幕| 手机av在线网| 蜜桃a∨噜噜一区二区三区| 欧美成人剧情片在线观看| 天天干天天色综合| 国产宾馆实践打屁股91| 在线成人性视频| 涩涩视频网站在线观看| 欧美一区二区三区视频免费播放 | 久久视频在线免费观看| 狠狠人妻久久久久久| 国产91富婆露脸刺激对白| 亚洲欧洲免费无码| 久久久一本精品| 日韩精品在线免费播放| 久草视频手机在线观看| 久久精品国产亚洲高清剧情介绍| 久久爱av电影| av电影在线地址| 日韩一区二区三区电影在线观看 | 国产女人高潮时对白| 国产日产欧美一区二区三区 | 欧美xxxx少妇| 在线不卡的av| 女人裸体性做爰全过| 久久一区视频| 女同一区二区| 手机在线观看av网站| 精品国精品自拍自在线| 加勒比av在线播放| 韩日精品视频一区| 亚洲精品人成| 激情亚洲小说| 在线播放日韩欧美| 国产污视频网站| 久久久亚洲欧洲日产国码αv| 国产一级爱c视频| 都市激情亚洲| 国语自产精品视频在线看一大j8| 朝桐光av在线一区二区三区| 亚洲免费视频成人| 国产又黄又嫩又滑又白| 国产精品www994| 国产精品 日韩| 啦啦啦中文在线观看日本| 日韩欧美国产1| 激情视频在线播放| eeuss国产一区二区三区 | 国产在线一区二区视频| 91精品国产综合久久久蜜臀图片| 日本二区三区视频| 国内精品免费在线观看| 国产欧美综合一区| 51社区在线成人免费视频| 欧美极品美女电影一区| 黄色av网站免费在线观看| 午夜欧美视频在线观看| 五级黄高潮片90分钟视频| 丝袜美腿成人在线| 亚洲国产精品一区在线观看不卡| 久久亚洲人体| 精品少妇一区二区30p| 日本韩国免费观看| 日韩欧美精品中文字幕| 国产探花视频在线| 国产精品影视在线观看| 男女视频网站在线观看| 久操精品在线| 成人网页在线免费观看| 久久香蕉一区| 在线播放日韩av| aaaa一级片| 五月婷婷久久综合| www久久久久久久| 国产一区二区三区不卡在线观看 | 国产 高清 精品 在线 a| 国产777精品精品热热热一区二区| 亚洲美腿欧美激情另类| 91精东传媒理伦片在线观看| 亚洲一级二级三级| 夜夜春很很躁夜夜躁| 国产福利精品导航| 人妻精品无码一区二区三区 | 亚洲色图18p| 国产三级自拍视频| 欧美日韩综合视频网址| 一级片一级片一级片| www国产亚洲精品久久麻豆| 中文字幕国内自拍| 国产欧美91| 伊人色综合影院| 一区二区三区国产好| 欧美在线激情视频| 欧美日韩在线资源| 亚洲美女性视频| av网站在线观看免费| 欧美日韩国产精品一区二区不卡中文| 美国黄色特级片| 国产91丝袜在线播放0| 国产精品少妇在线视频| 亚洲三级网址| 国产精品日韩一区二区| 国产成人精选| 91极品视频在线| fc2ppv国产精品久久| 亚洲精品中文字幕女同| 国产激情视频在线播放 | 日韩精品一区二区免费| 国产欧美日韩在线一区二区| 亚洲最大福利视频| 免费亚洲电影| 97不卡在线视频| 99福利在线| 在线观看欧美成人| 日韩av成人| 日韩欧美亚洲国产另类| 在线观看免费中文字幕| 精品国产鲁一鲁一区二区张丽 | 精品视频久久| 国产伦精品一区二区三区免 | 国产成人精品免费久久久久| 色噜噜狠狠狠综合欧洲色8| 精品无人区乱码1区2区3区在线| 99热这里只有精品3| 欧洲一区二区av| 91国产丝袜播放在线| 国产精品免费av| 一道本在线观看| 9久草视频在线视频精品| 国产免费999| 巨乳诱惑日韩免费av| 水蜜桃在线免费观看| 97国产成人高清在线观看| 久久久久久久久久久久久9999| 一区二区三区国产好| 97超碰资源| 麻豆国产一区| 国产精品国产三级国产aⅴ9色| 末成年女av片一区二区下载| 欧美激情一级二级| 在线视频中文字幕第一页| 久久五月情影视| 日本高清视频在线观看| 最近2019年手机中文字幕| 成人免费视频| xvideos亚洲人网站| 中文字幕在线播放| 中文字幕综合一区| 操你啦视频在线| 美日韩在线视频| 亚洲大胆人体大胆做受1| 色琪琪综合男人的天堂aⅴ视频| 在线看黄色av| 日韩在线播放一区| 永久免费在线观看视频| 久久偷看各类女兵18女厕嘘嘘| caopo在线| 久久久久中文字幕| 黄av在线播放| 欧美精品videofree1080p| 阿v视频在线观看| 91精品国产91久久久久久最新| 自由日本语热亚洲人| 国产精品都在这里| 日韩精品第二页| 亚洲影院污污.| 欧美成人aaa| 亚洲综合在线播放| 国产精品男女| 欧美一区二区综合| 99re久久最新地址获取| 三级网在线观看| 亚洲国产高清一区二区三区| 欧美精品卡一卡二| 久久av一区| www.精品在线| 国产成人自拍高清视频在线免费播放| 男人女人拔萝卜视频| 久久久久久久久一| 女同久久另类69精品国产| 亚洲在线观看免费| 精品国产乱码一区二区| 欧美日韩视频在线第一区 | 欧美日韩在线播放一区| 国内老熟妇对白hdxxxx| 亚洲国产日韩精品在线| 大片免费播放在线视频| 欧美高清性猛交| 亚洲美女炮图| 成人免费看片视频| 伊人久久大香线蕉无限次| 宅男一区二区三区| 亚洲人体偷拍| www.精品在线| 久久久久久久久伊人| 国产一二三四区| 欧美视频在线看| 99久久国产免费| 亚洲欧美成人一区二区在线电影| 91一区二区三区在线| 国产精品国产三级国产aⅴ9色 | 日韩高清一区二区| 农村末发育av片一区二区| 国产精品久久精品日日| 99超碰在线观看| 日韩美女视频在线| 老司机av在线免费看| 国产成人精品综合| 成人av动漫| 日本一区免费观看| 亚洲黄色av| 国内av免费观看| 久久亚洲一级片| 日本亚洲色大成网站www久久| 777奇米成人网| 天堂在线视频观看| 欧美国产精品va在线观看| 久久麻豆视频| 国产一区二区三区黄| 91精品久久久久久久蜜月| 国产激情在线观看视频| 国产电影一区在线| 91高清免费观看| 欧美午夜片在线观看| 污视频在线免费观看| 欧美激情按摩在线| 日日夜夜精品| 欧美日韩亚洲综合一区二区三区激情在线 | 日韩网站在线播放| 亚洲午夜在线电影| 精品欧美在线观看| 神马久久久久久| 日韩在线免费| 免费中文日韩| 夜夜嗨一区二区三区| 人妻体内射精一区二区三区| 亚洲精品高清视频在线观看| 国产绿帽刺激高潮对白| 色悠悠久久久久| 国精产品一区一区三区四川| 日本一区高清不卡| 日本不卡高清视频| 中文字幕第20页| 欧美在线你懂的| av黄色在线观看| 国产精品久久久久久av福利软件| 国产一区二区精品久| 精品视频无码一区二区三区| 久久亚洲精华国产精华液| 在线观看日本视频| 亚洲激情自拍图| 黄色综合网址| 欧美一区二区在线视频观看| 亚洲一区二区三区高清不卡| 免费a在线观看播放| 欧美色视频日本高清在线观看| 欧美日韩影视| 日本免费久久高清视频| 欧美精品羞羞答答| 亚洲va综合va国产va中文| 国产精品白丝在线| av中文字幕免费| 97视频在线播放| 制服丝袜日韩| 男人揉女人奶房视频60分| 欧美国产丝袜视频| 99精品在线看| 欧美性受xxxx白人性爽| 国内精品久久久久久久影视简单| av在线无限看| 亚洲综合一二三区| 性感美女一级片| 欧美在线中文字幕| 国产精品99一区二区三区| 亚洲热在线视频| 欧美日韩中文字幕| 香蕉视频在线免费看| 亚洲最大成人网色| 亚洲自啪免费|