c++古典面試問題之一:物件導向程式設計三大特性--封裝,繼承,多型
c++古典面試問題之二:如何實現多型-- 當基類指標指向派生類物件,並透過這個指標呼叫在派生類中被重寫的虛擬函式
基於上述知識點,今天我們講下另一種多型實現方式:CRTP (curiously recurring template pattern)
- 虛擬函式不好用嗎?CRTP有什麼不一樣特性?
虛擬函式方法有查詢虛擬函式表的記憶體開銷,執行時檢查型別,屬於動態多型;CRTP無執行時的多餘開銷,在編譯時檢查型別,為靜態多型,對於嵌入式程式設計,效能上更優。
CRTP主要缺點是程式碼可讀性差,對於不喜歡使用模板人群更是雪上加霜。
- 如何識別什麼是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
之後學到哪再繼續更新。。。