C 的 RTTI 可以刪掉了

2021-05-01 17:06:20 字數 717 閱讀 1985

一兩年沒碰程式設計了,最近開始寫乙個程式,寫的過程中想到了一些東西。

看這段**

這個乙個用模板實現的協議類,擁有乙個虛成員函式和乙個虛析構函式,其功能可以用以下**來測試

和協議類有點不同,這裡的模板協議類語義上並不是指標,是不是省心很多?有了新標準的move語意的話,效能上也不會有什麼問題。

這只是個很簡單的實現,但已具有了乙個協議類幾乎所有的功能,並且在通用性上遠高於協議類,它可以接受任意型別的對像,而不用考慮任何繼承關係,唯一的要求只是付與的對像擁有看起來像是「int killthebear(int)」這樣的成員。

如果寫成這樣

這樣乙個函式既有泛型函式通用任何型別,同時型別安全的特點,又像普通函式一樣有函式體,有2進製接囗,你甚至可以把它放在乙個dll中輸出,可以算是「執行時泛型」吧。

下面是之後寫的乙個複雜一些的實現,有了全域性的虛函式表,其中有兩個子函式介面,乙個虛析構函式,乙個虛operator=(),乙個代表型別的整型數值,若特化了typeid模板,還可以實現dynamic_cast語義。

可以通過下面**來測試

如果說當時c++引進rtti是回為用c原有的語法不能實現相應的功能,那麼現在看來rtti不過是模板功能的乙個小子集,而且還是不完整的乙個子集,那麼rtti是不是該從c++中扔掉了?

至少有個編譯選項可以關掉rtti和聯帶的一些帶來壞影響的特性,那麼在我們需要更好的功能和安全性,而**量卻不是關鍵時,也是個不錯的選擇吧。

C 的RTTI和dynamic cast效率問題

在網上經常看到有人說,dynamic cast的效率問題.當然因為它是執行 時的cast,開銷必然少不了.對於down cast,可以用static cast代替,只不過不太安全.對於鑽石結構類關係,要cast到兄弟類,那麼只能用dynamic cast了.記得我在做前乙個專案中,發現召喚了500個...

C 中的RTTI機制詳解

前言 rtti是 runtime type information 的縮寫,意思是執行時型別資訊,它提供了執行時確定物件型別的方法。rtti並不是什麼新的東西,很早就有了這個技術,但是,在實際應用中使用的比較少而已。而我這裡就是對rtti進行總結,今天我沒有用到,並不代表這個東西沒用。學無止境,先從...

C 中的RTTI機制詳解

前言 rtti是 runtime type information 的縮寫,意思是執行時型別資訊,它提供了執行時確定物件型別的方法。rtti並不是什麼新的東西,很早就有了這個技術,但是,在實際應用中使用的比較少而已。而我這裡就是對rtti進行總結,今天我沒有用到,並不代表這個東西沒用。學無止境,先從...