版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/i_chaoren/article/details/80460470
Variadic Template是C++11的一个很重要的特性;
变体现在两个方面:
(1)参数个数:利用参数个数逐一递减的特性,实现递归调用;
(2)参数类型:参数个数逐一递减导致参数类型也逐一递减;
两个注意点
(1)递归调用
(2)递归终止:使用重载的办法终止递归调用;
举两个例子
1.print函数
/// Variadic template
//重载的递归终止函数
void printX() {
}
template<typename T,typename...Types>
void printX(const T& firstArg, const Types&...args) {
cout << firstArg << endl;
printX(args...);
}
int main()
{
printX(7.5, "hello", bitset<16>(377), 42);
return 0;
}
2. max函数
//重载的递归终止条件
int maximun(int n){
return n;
}
template<typename...Args>
int maximun(int n,Args...args){
return std::max(n,maximun(args...));
}
int main()
{
//C++11之后已经支持了多个数求最大值的操作,使用initializer_list
//cout << max({ 57,48,60,100,20,18 });
cout<<maximun(57,48,60,100,20,18)<<endl;
return 0;
}
有一篇写的不错的博客可参考:
http://www.cnblogs.com/qicosmos/p/4325949.html