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,