请你详细介绍一下C++11中的可变参数模板这个新特性

[1] 可变参数模板:

C++11的可变参数模板,对参数进行了高度泛化,可以表示任意数目、任意类型的参数,
其语法为:在class或typename后面带上省略号”。

例如:
Template<class ... T>
void func(T ... args)
{
cout<<”num is”<<sizeof ...(args)<<endl;
}
func();//args不含任何参数
func(1);//args包含一个int类型的实参
func(1,2.0)//args包含一个int一个double类型的实参
其中T叫做模板参数包,args叫做函数参数包

省略号作用如下:
1)声明一个包含0到任意个模板参数的参数包
2)在模板定义得右边,可以将参数包展成一个个独立的参数
C++11可以使用递归函数的方式展开参数包,获得可变参数的每个值。通过递归函数展
开参数包,需要提供一个参数包展开的函数和一个递归终止函数。

例如:
#include using namespace std;
// 最终递归函数
void print()
{
cout << "empty" << endl;
}
// 展开函数
template void print(T head, Args... args)
{
cout << head << ","; print(args...);
}
int main()
{
print(1, 2, 3, 4); return 0;
}

参数包Args ...在展开的过程中递归调用自己,没调用一次参数包中的参数就会少一个,
直到所有参数都展开为止。当没有参数时就会调用非模板函数printf终止递归过程。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值