#include
#include
#include
#include
using
namespace std;
#if 1
// case1:不使用模版模版引數,明確指定容器的型別,比如stl庫的stack實現,見下:
template
<
typename t,
typename cont = std::deque>
class
stack1};
intmain
(int argc,
char
const
*ar**)
#elif 0
// case2:使用alias template的語法(c++11)傳參
// 推導過程:其實e只是佔位符號,會替換alias template(即using語法)中宣告的原型。此處可以省略e,使用前面已出現的t。(具體參見case3)
template
<
typename t,
template
<
typename e>
class
cont
= std::deque>
class
stack2};
template
<
class
e>
using vec = vector>
;int
main
(int argc,
char
const
*ar**)
#elif 0
// case3:省略e,使用之前出現過的t去做推導
template
<
typename t,
template
<
typename
>
class
cont
= std::deque>
class
stack3};
template
<
class
e>
using vec = vector
>
;int
main
(int argc,
char
const
*ar**)
#elif 0
// case4
// 同理,可以不寫using語法,直接在模板類中寫全,此方法適用於c++98(但是需要注意兩個》在一起的時候需要加空格,不然報錯)
template
<
typename t,
template
<
typename e,
typename alloc = allocator
>
class
cont
>
class
stack4};
intmain
(int argc,
char
const
*ar**)
#elif 0
// case5:省略佔位符e,使用之前出現過的t
// 也可以省略乙個佔位符號e,注意:如果有預設=出現的地方不能省略型別別名,比如「typename alloc = allocator」中的t
// 要省略t就得替換為前置出現的別名(因為省略型別之後變為了模板類),
// 比如「typename alloc = allocator」變為「templateclass alloc = alloctor」,詳見case6
template
<
typename t,
template
<
typename
,typename alloc = allocator>
class
cont
>
class
stack5};
intmain
(int argc,
char
const
*ar**)
#elif 0
// case6:同理,可以省略m,使用之前的t,如case7
// case6\case7 可以通過編譯,但無測試用例,太複雜。
template
<
typename t,
template
<
typename
,template
<
typename m>
class
alloc
= allocator>
class
cont
>
class
stack6};
intmain
(int argc,
char
const
*ar**)
#elif 0
// case7:同理,可以省略m,使用之前的t,如case7
// template
<
typename t,
template
<
typename
,template
<
typename
>
class
alloc
= allocator>
class
cont
>
class
stack7};
intmain
(int argc,
char
const
*ar**)
#endif
C 模板模板引數
c 模板的使用一共有以下幾種情況。而本篇介紹模板模板引數。模板引數就是模板的引數,我們一般指定為t型別,實際上可以使用任何的名字,例如指定乙個foo的模板引數 temlate foo calc const foo a,const foo b 而模板模板引數則是模板的引數又是乙個模板,例如 templ...
C 模板模板引數
模板引數就是模板的引數,我們一般指定為t型別,實際上可以使用任何的名字,例如指定乙個foo的模板引數 temlate foo calc const foo a,const foo b 而模板模板引數則是模板的引數又是乙個模板,例如 templatetypename container class x...
C 基礎 模板引數與模板繼承
函式引數可以設定乙個預設值,我們現在可以對類模板的型別引數設定乙個預設型別。指定泛型stack的預設型別引數為 int template typename t int class stack 當我們這樣定義乙個物件時 stack stack 使用預設的方式,或者說隱式的方式,例項化了乙個stack物...