可變參類模板
variadic templatet允許模板中有0到任意個模板引數
emplate<
typename..
. t>
void
myfunc
(t..
. ar**s)
myfunc()
;//0 0
myfunc(11
,23);
//2 2
myfunc(14
,12.4
,"nj",3
);//4 4
ar**s 稱為一包或者一堆引數,這些引數的型別可以各不相同。理解t這種型別,不能看成一種型別,要看成0到多個不同型別,那對應的ar**s是不同型別的引數
t後邊帶…,稱t為可變參型別,0到多個不同型別(一包型別) ar**s,可變形參,一包形參
template
<
typename t,
typename..
. u>
void
myfunc2
(const t& ar**1,
const u&..
. otherar**)
myfunc(11
,23);
//1
myfunc(14
,12.4
,"nj",3
);//3
需要乙個引數展開函式,和乙個同名的遞迴終止函式乙個引數+一包引數的寫法最適合引數包的展開
template
<
typename t,
typename..
. u>
void
myfunc2
(const t& ar**1,
const u&..
. otherar**s)
//遞迴終止函式
void
myfunc2()
template
<
typename..
. ar**s>
class
myclass
;//主模板
//0個引數特化版本
template
<
>
class
myclass
<
>
}template
<
typename first,
typename..
. others>
class
myclass
>
:myclass
>
first m_i;
}myclass<
int,
float
,double
> mc;
//呼叫了三次建構函式
開啟查詢 myclass<
C 11 14之可變參類模板與模板模板引數
通過tuple和遞迴呼叫展開引數包 總結模板 模板引數 組合關係 復合關係 class bclass a組合關係展開引數包案例template typename first,typename.others class myclass myclass first parf,others.paro m ...
C 11 14特性備忘
template auto add t x,u y int array for auto x array include 建構函式列表初始化 class magic magic magic std vector int v 普通函式形參 void func std initializer list ...
C 可變參模板
可變引數模板是乙個接受可變數目引數的模板函式或模板類,在模板引數列表中,typename 指出接下來的引數表示0個或多個型別的列表,乙個型別名後面跟省略號表示0個或多個給定型別的非型別引數的列表。在函式引數列表中,如果乙個引數的型別是乙個模板引數包,則此引數也是乙個函式引數包。可變引數模板通常是遞迴...