by feng
Variadic Templates 的引入,消去了煩冗的模板特化。
一個例子:
#include <iostream>
double
do_sum()
{
return
0;
}
template
<
typename
T,
typename
... Args >
double
do_sum( T&& t, Args&& ... args )
{
return
t + do_sum( args... );
}
int
main()
{
std::cout << do_sum( 1.0, 2.0, 3.0, 4.0 )
<< std::endl;
return
0;
}
這裡需要注意的有兩點:
另外要看到,在變長模板函數聲明中使用 … 的方法
大致可以看出,有 typename 的時候 .. 跟 typename 後邊,否則跟在 Arg 後邊,最後則是在參數 arg 後邊
如果需要知道到底傳入了多少個參數可以這樣來
1 2 3 4 5
template
<
typename
... Args>
std::
size_t
how_many_args(Args ... args)
{
return
sizeof
...(args);
}
variadic template 基本使用到這裡就差不多了,下邊的內容略略而過即可
再次注意這個 …,來個稍微有點復雜的
1 2 3 4 5 6 7 8template
<
typename
... T>
void
f(T (* ...t)(
int
,