模板與繼承之藝術 奇特的遞迴模板模式(CRTP)

2022-04-01 00:44:51 字數 1203 閱讀 8710

一、什麼是crtp

奇特的模板遞迴模式(curiously recurring template pattern)即將派生類本身作為模板引數傳遞給基類。

template

class baset{};

class d : public baset{};

類d是乙個非依賴型基類,不是模板。

(1)被繼承的類模板(baset)的模板引數(t)可以是模板引數

template

class baset{};

template

class d : public baset>{};

(2)被繼承的類模板(baset)的模板引數(t)可以是模板

typenameclass t>

class baset{};

template

class d : public baset{};

二、crtp的乙個簡單應用就是記錄某個類物件構造的總個數。

#include

#include

template

class objectcounter//宣告為protected,防止生成物件,限定只能被繼承

objectcounter(constobjectcounter& )

~objectcounter()

public:

staticsize_t getcount()//作為靜態函式,類方法

模板與繼承之藝術 空基類優化

1 概念 c 中有 空 類的概念,這就意味著在執行期間其內部不好任何記憶體。只包含型別的成員函式 非虛成員函式和靜態資料成員的類為空類。非靜態的資料成員,虛函式和虛基類則在執行時期消耗儲存空間。2 空基類優化如下 include using namespace std class empty cla...

C 模板 函式模板 類模板 模板與繼承

c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。1.支援不同資料型別的函式過載 cpp view plain copy include using namespace std int square int...

C 模板 函式模板 類模板 模板與繼承

2013 09 13 23 09 28054人閱讀收藏 舉報 c c stl 泛型程式設計 64 目錄 c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。1.支援不同資料型別的函式過載 cpp view p...