**
模板引數就是模板的引數,我們一般指定為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物...