新聞中心
C++編程語(yǔ)言中的RTTI的實(shí)現(xiàn),在一定環(huán)境中起著非常重要的作用。我們?cè)谶@篇文章中就會(huì)針對(duì)C++實(shí)現(xiàn)RTTI的操作方法進(jìn)行一個(gè)總結(jié),希望大家可以根據(jù)我們總結(jié)的經(jīng)驗(yàn),來(lái)充分掌握這一應(yīng)用技巧。#t#

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到慶元網(wǎng)站設(shè)計(jì)與慶元網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋慶元地區(qū)。
RTTI(運(yùn)行時(shí)類(lèi)型信息),是所有RAD開(kāi)發(fā)工具的基礎(chǔ)。這段時(shí)間,因?yàn)樾枰谧约旱能浖屑尤霐U(kuò)展的RTTI功能,于是專(zhuān)門(mén)對(duì)RTTI進(jìn)行了研究,現(xiàn)在一些心得寫(xiě)下來(lái)。
RTTI是比較新的編程語(yǔ)言提供的能力,C、Fortran、Basic就沒(méi)有,而現(xiàn)在幾乎所有現(xiàn)代的、可視化的編程語(yǔ)言都提供了RTTI功能。C++的標(biāo)準(zhǔn)中也對(duì)RTTI作了規(guī)定。但相對(duì)其它語(yǔ)言而言,C++的RTTI信息是最簡(jiǎn)單的。
一、RTTI典型的應(yīng)用需求
1、類(lèi)型的識(shí)別,即能在運(yùn)行時(shí)判斷出某對(duì)象、表達(dá)式等的類(lèi)型,能判斷它們是基本類(lèi)型(int、string),還是對(duì)象,以及它們區(qū)別于其它類(lèi)型的標(biāo)識(shí);
2、對(duì)象的繼承關(guān)系的運(yùn)行時(shí)判斷;
3、在出錯(cuò)處理、內(nèi)存診斷等處理時(shí)的輸出信息;
4、基于字符型名稱(chēng)的運(yùn)行時(shí)對(duì)象訪問(wèn)、方法調(diào)用;
5、對(duì)象的自動(dòng)保存和讀入;
6、基于ID或名稱(chēng)的對(duì)象自動(dòng)生成;
7、環(huán)境配置的保存和讀入;
8、程序自動(dòng)生成;
二、C++實(shí)現(xiàn)RTTI
RTTI最直接的實(shí)現(xiàn)是通過(guò)編程語(yǔ)言的語(yǔ)法支持功能,由編譯器自動(dòng)完成,比如:Delphi等語(yǔ)言就提供了Property關(guān)鍵字。C++語(yǔ)言沒(méi)有這些語(yǔ)法支持功能,因?yàn)镃++不是一種RAD語(yǔ)言,可以將VB、Delphi、Java等與之進(jìn)行對(duì)比。C++的RTTI是最簡(jiǎn)單的,只能獲得類(lèi)名和相關(guān)的繼承信息;而VB、Delphi、Java等確復(fù)雜得多,甚至于支持屬性名、方法名、事件名等。
標(biāo)準(zhǔn)C++ 提供了typeid() 操作,以得到類(lèi)型信息,它的參數(shù)可以是一個(gè)表達(dá)式,可以是一個(gè)對(duì)象、指針或者引用,通過(guò)這個(gè)方法,可以得到一個(gè)指向常type_info對(duì)象,里面包含了這個(gè)表達(dá)式的類(lèi)型必要的信息。type_info對(duì)象提供的功能有如下這些:
1、name(),可以得到一個(gè)包含類(lèi)型信息的字符串,返回如:"int"、"MyClass"等;
2、before(),用來(lái)在類(lèi)型列表中遍歷;
3、==操作,用來(lái)判斷類(lèi)型是否相同;
VC中的MFC提供的RTTI實(shí)現(xiàn)與C++提供的差不多,但是有一些功能上和實(shí)現(xiàn)在的差別,但也只是提供了名稱(chēng)和比較功能。
不能說(shuō),這是C++或VC中的缺陷,這是由C++的定位決定了,如果C++加上了復(fù)雜的RTTI信息,則C++可能就變成了C#或別的什么語(yǔ)言了。是的,C#增加了比較復(fù)雜的RTTI信息,誰(shuí)讓他的主設(shè)計(jì)者就是從Borland公司過(guò)去的呢(這也決定了C++在.NET框架中的會(huì)被淘汰的命運(yùn),因?yàn)樗?NET中沒(méi)有合適的定位,就象VF被淘汰一樣)。
三、C++實(shí)現(xiàn)RTTI的要點(diǎn)
作為一種語(yǔ)言的新特性,RTTI的實(shí)現(xiàn),應(yīng)有如下要求:
1、必須滿(mǎn)足特定語(yǔ)言的定位和要求,不能說(shuō),將所有可能的功能加進(jìn)去就是好東西了;
2、必須是盡可能透明的,RTTI的主要應(yīng)用在IDE和底層,一般情況下,編程用戶(hù)不需要了解過(guò)多的RTTI細(xì)節(jié),比如:作為Delphi用戶(hù),他只需要基于屬性的訪問(wèn)方法,只需要知道基于組件的保存方法,不需要了解RTTI在其中所起的作用,就象電視機(jī)的使用者不需要了解電視機(jī)的原理;
3、盡可能輕便,不能因?yàn)閷?shí)現(xiàn)RTTI要耗費(fèi)大量?jī)?nèi)存和CPU時(shí)間,不能占用太大的程序空間,當(dāng)然,這個(gè)要求是相對(duì)的,
4、盡可能高效
5、作為RTTI的實(shí)現(xiàn)者,應(yīng)該盡可能在定義了功能集的情況下,以幽雅的方法實(shí)現(xiàn)之。
C++實(shí)現(xiàn)RTTI和執(zhí)久化是通過(guò)宏來(lái)完成的,幽雅嗎?算是吧。
本文標(biāo)題:C++實(shí)現(xiàn)RTTI具體操作經(jīng)驗(yàn)總結(jié)
網(wǎng)頁(yè)鏈接:http://www.fisionsoft.com.cn/article/cdiiggj.html


咨詢(xún)
建站咨詢(xún)
