在VC++中,__uuidof是一個(gè)擴(kuò)展操作符用于取得組件或接口的uuid,在COM編程中經(jīng)常用到。那么在其它編譯器中我們?nèi)绾螌?shí)現(xiàn)這個(gè)很有用的功能呢?方法也許不只一種,這介紹用type traits的方式來(lái)實(shí)現(xiàn),為了簡(jiǎn)單起見(jiàn),并不使用GUID結(jié)構(gòu)來(lái)表示uuid以省去GUID的定義和其繁瑣的初始化操作,這里用一個(gè)字符串來(lái)表示一個(gè)類(lèi)的uuid,有點(diǎn)類(lèi)似于COM編程中的ProgID(Programme ID,編程ID,COM編程中指表示接口或組件的容易記憶的名字,以下uuid都是指這個(gè)ID)首先來(lái)定義一個(gè)模板類(lèi)來(lái)存儲(chǔ)uuid
這個(gè)類(lèi)沒(méi)有任何實(shí)現(xiàn),uuid數(shù)據(jù)將存儲(chǔ)于其特化版本,看以下的代碼
現(xiàn)在我們可以通過(guò) _UuidTraits<TheClass>::uuid 來(lái)取類(lèi)ClassA的uuid來(lái),方便使用我們定義一個(gè)宏#define __uuidof(x) (_UuidTraits<x>::uuid)但這樣只實(shí)現(xiàn)了ClassA的uuid,如果為每個(gè)類(lèi)都寫(xiě)一個(gè)_UuidTraits的特化版本有點(diǎn)累,但我們可以用宏來(lái)簡(jiǎn)化
這樣我們就可以方便的為類(lèi)定義uuid了,比如:
OK,現(xiàn)在試試__uuidof(ClassB),應(yīng)該返回字符串"ClassB"了。還有一點(diǎn)要說(shuō)明的是,為了能兼容UNICODE,可以定義兩個(gè)版本的DEFINE_UUID:
這樣在使用UNICODE字符編碼編譯時(shí),__uuidof返回的就是unicode字符串了
posted on 2008-01-21 21:29 深藍(lán)色系統(tǒng) 閱讀(366) 評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi): 皮皮片片