C 模板模板引數

2021-09-10 22:48:41 字數 830 閱讀 4197

** 

模板引數就是模板的引數,我們一般指定為t型別,實際上可以使用任何的名字,例如指定乙個foo的模板引數:

temlate

foo calc(const foo& a, const foo& b)

而模板模板引數則是模板的引數又是乙個模板,例如:

templatetypename container>

class xcls

;模板的第乙個引數是t型別,第二個引數是乙個container,他是乙個可以指定乙個u型別的變數。

那麼如何使用他呢?

template

class test

;int main(void)

我們可以定義乙個模板類,然後將其如上方式傳入就可以了。

但是如果傳入乙個容器呢?比如:list

xclsmylst1;

1如果編譯就會報錯。我們分析一波:

將string 和 list傳入到類xcls中,然後就會定義乙個list的c變數,這樣看起來是可以的,因此我們使用list容器的時候就是list《乙個型別》,但是這裡為什麼就不行呢?是因為list容器實質上是有第二引數的,雖然第二引數有預設的引數,正如我們平常使用的那樣,只需要指定乙個引數,但是在這裡無法通過編譯,因此,我們使用如下解決辦法:

template

using lst = std::list>;

xclsmylst2;

// 編譯時需要加上std=c++11

使用c++11的using關鍵字的新功能,來定義乙個型別的別名,而且使用在模板的情況下,因此我們編譯時要指定std=c++11

然後我們將list的別名lst傳入進入,就可以編譯通過。

C 模板模板引數

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

玩轉c 模板模板引數

include include include include using namespace std if 1 case1 不使用模版模版引數,明確指定容器的型別,比如stl庫的stack實現,見下 template typename t,typename cont std deque class...

C 基礎 模板引數與模板繼承

函式引數可以設定乙個預設值,我們現在可以對類模板的型別引數設定乙個預設型別。指定泛型stack的預設型別引數為 int template typename t int class stack 當我們這樣定義乙個物件時 stack stack 使用預設的方式,或者說隱式的方式,例項化了乙個stack物...