CRTP 和靜態多型

henkenen發表於2024-08-22

c++古典面試問題之一:物件導向程式設計三大特性--封裝,繼承,多型

c++古典面試問題之二:如何實現多型-- 當基類指標指向派生類物件,並透過這個指標呼叫在派生類中被重寫的虛擬函式

基於上述知識點,今天我們講下另一種多型實現方式:CRTP (curiously recurring template pattern)

  1. 虛擬函式不好用嗎?CRTP有什麼不一樣特性?

    虛擬函式方法有查詢虛擬函式表的記憶體開銷,執行時檢查型別,屬於動態多型;CRTP無執行時的多餘開銷,在編譯時檢查型別,為靜態多型,對於嵌入式程式設計,效能上更優

    CRTP主要缺點是程式碼可讀性差,對於不喜歡使用模板人群更是雪上加霜。

  1. 如何識別什麼是CRTP?

    基類是模板類

    

    派生類將自身作為引數傳給模板類

    

擴充閱讀:The cost of dynamic (virtual calls) vs. static (CRTP) dispatch in C++ - Eli Bendersky's website (thegreenplace.net)

文中程式碼來源:https://github.com/GerdHirsch/Cpp-TemplateFactoryMethod

之後學到哪再繼續更新。。。

相關文章