C++慣用法:奇特的遞歸模板模式(Curiously Recurring Template Pattern,CRTP,Mixin-from-above)

意圖:

使用派生類作爲模板參數特化基類。

 

與多態的區別:

多態是動態綁定(運行時綁定),CRTP是靜態綁定(編譯時綁定)

 

在實現多態時,需要重寫虛函數,因而這是運行時綁定的操作。

然而如果想在編譯期確定通過基類來得到派生類的行爲,CRTP便是一種獨佳選擇,它是通過派生類覆蓋基類成員函數來實現靜態綁定的。

 

範式:

 

示例代碼:

 

缺點:

CRTP由於基類使用了模板,目前的編譯器不支持模板類的導出,因而不能使用導出接口。

 

其它使用領域:

在數值計算中,往往要對不同的模型使用不同的計算方法(如矩陣),一般使用繼承提供統一接口(如operator運算符),但又希望不損失效率。這時便又可取CRTP慣用法,子類的operator實現將覆蓋基類的operator實現,並可以編譯期靜態綁定至子類的方法。

 

英文鏈接:http://en.wikibooks.org/wiki/More_C++_Idioms/Curiously_Recurring_Template_Pattern

 

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