模板系列 一 模板的模板引數

2022-08-15 10:03:11 字數 1469 閱讀 6615

前面我們寫過類似的stack:

template >

class

stack

;

那麼我們使用的時候需要這樣:

stack > st;

我們看到,string這個型別引數出現了兩次,那麼可不可以消除呢?

顯然我們的目的是只指定容器的型別,而不包括元素的型別,這就需要借助模板的模板引數,來幫助我們寫出一下**:

stack st;

這裡我們需要定義模板引數的第二項為模板:

template template 

class alloc = std::vector>

class stack;

我們寫出乙份完整的實現:

1 template 2           template 3

class alloc = std::vector>

4class

stack511

12bool empty() const

13

14private

:15 alloc_cont;

16};

1718 template class alloc>

19void stack::push(const t &s)

2023

24 template class alloc>

25void stack::pop()

26

然而該段**仍然會編譯錯誤,這是因為無論是vector還是list都有兩個模板引數,於是無法與alloc這個引數匹配。

我們將模板修改為:

template template 

>

class container = std::vector>

class stack;

完整的實現為:

1 template 2           template >

3class container = std::vector>

4class

stack511

12bool empty() const

13

14private

:15 container_cont;

16};

1718 template class container>

19void stack::push(const t &s)

2023

24 template class container>

25void stack::pop()

26

測試**為:

stackst;

st.push(

"foo");

st.pop();

模板 一 模板與非型別模板引數 模板的模板引數

活著就意味必須要做點什麼,請好好努力。地下 模版是泛型程式設計的基礎,模版分為 函式模版 和 類模版 函式模板格式 template class 或typename 形參名1 class 形參名2 class 形參名n 返回型別 函式名 引數列表 模板形參的定義既可以使用class,也可以使用typ...

可變參模板模板模板引數

include include include include include include include include using namespace std namespace nmsp1 classa template typename.args class myclasst 主模板 t...

C 模板模板引數

c 模板的使用一共有以下幾種情況。而本篇介紹模板模板引數。模板引數就是模板的引數,我們一般指定為t型別,實際上可以使用任何的名字,例如指定乙個foo的模板引數 temlate foo calc const foo a,const foo b 而模板模板引數則是模板的引數又是乙個模板,例如 templ...