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