靜態多型和CRTP

2021-10-04 17:33:32 字數 495 閱讀 9680

千萬不要忘記多型還有靜態多型

靜態多型有:1.函式過載。2.模板方法

crtp也是一種實現靜態多型的方法:

template

<

typename t>

class

base

private

:void

methodimpl()

};class

extend1

:public base};

class

extend2

:public base};

void

main()

主要就是method和impl分離,method根據具體的型別(從模板引數獲取)呼叫對用的impl方法.

若沒有強制轉型static_cast,那麼只會呼叫基類的impl方法,即是派生類繼承了基類。

其實這裡的method更像是乙個模板。

參考:

CRTP 靜態多型

對於raii的虛函式的效率問題,是因為沒有辦法確定指標的具體型別,才採用了執行時動態判斷,但是這樣會導致效率降低。看過一篇知乎的文章說使用benchmark測得普通函式與虛函式的差距在8 10倍,具體原因跟很多方面有關。crtp就是為了優化掉這個問題而提出的一種模式,將原來的虛繼承改為了繼承 定製的...

C 多型技術 靜態多型和動態多型

多型 polymorphism 一詞最初 於希臘語polumorphos,含義是具有多種形式或形態的情形。在程式設計領域,乙個廣泛認可的定義是 一種將不同的特殊行為和單個泛化記號相關聯的能力 和純粹的物件導向程式設計語言不同,c 中的多型有著更廣泛的含義。除了常見的通過類繼承和虛函 數機制生效於執行...

靜態多型 動態多型

又稱編譯期多型,即在系統編譯期間就可以確定程式將要執行哪個函式。例如 函式過載,通過類成員運算子指定的運算。函式過載示例 class a a int x void f void f int x class b void f void f int x 以上,類a中兩個a 是函式過載,兩個f 是函式過載...