ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++11新特性(3)之可变参数模板(variadic template)

2019-07-29 22:07:15  阅读:505  来源: 互联网

标签:11 ... args Args c++ 参数 variadic sizeof 模板


可变参数模板(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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有