编程语言
首页 > 编程语言> > c++11新特性(3)之可变参数模板(variadic template)

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