深入理解C++對象模型之類型轉換:ReinterpretCast

 

C++,沒有任何一種轉換操作符可以將成員指針轉換成其它類型數據類型,那有沒有辦法獲取到成員指針的值呢?有的人會說可以通過sprintf,atoi等函數獲取.那有沒有更簡單通用的方法呢?答案是有的.我們可以通過template 和 union實現任何類型到另一兼容類型的(所謂兼容是指,兩種類型的大小一致)轉換操作符 ReinterpretCast<Dest,Src>.

在給出這一實現之前,我們先來先來探討一下另外一個實用宏: StaticAssert.

StaticAssert宏是利用這樣一個語法事實:能將sizeof應用於任何非完全類型.下面是StaticAssert的實現:

接下來我們會給出ReinterpretCast<Dest,Src>的實現:

下面我們來寫一小段測試代碼:

 

輸出:

 

未經允許,請勿轉載.

Copyright © SammyLan

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章