c++11新特性(3)之可变参数模板(variadic template)
作者:互联网
可变参数模板(variadic template)
听说这是一个c++新特性 中最大的改动,我的认识有限只能写一些十分基础的理解,但我会持续更新。
所谓可变参数模板,就是模板函数的参数是可以变化的,不是一个、两个参数,而是一包参数,这一包参数可以是0个到n个,这种将参数打包的操作就是可变参数模板。具体的语法如下:
template<typename T,typename... Args>
void printX(T& firstarg,Args&... args);
我们也可以得到这个包的大小:这是承接上面的代码,两种写法的结果是一致的。
sizeof...(Args);
sizeof...(args) ;
第一个应用例子,递归:
#include<iostream>
using namespace std;
void printX(){}
template<typename T,typename... Args>
void printX(T& firstarg,Args&... args){
cout << "sizeof...(Args)=" << sizeof...(Args) << endl;
cout << "sizeof...(args)=" << sizeof...(args) << endl;
cout << firstarg << endl;
printX(args...);
}
int main(){
string str = "hello";
int i = 25;
double j = 12.23;
float m = 123.56;
printX(str,i,j,m);
return 0;
}
结果:
sizeof...(Args)=3
sizeof...(args)=3
hello
sizeof...(Args)=2
sizeof...(args)=2
25
sizeof...(Args)=1
sizeof...(args)=1
12.23
sizeof...(Args)=0
sizeof...(args)=0
123.56
解释:当这包数据为0的时候,就将不符合我们的模板函数,所以我们需要有一个空函数,来接受这种情况。
标签:11,...,args,Args,c++,参数,variadic,sizeof,模板 来源: https://blog.csdn.net/shaochuang1/article/details/97685028