c++11 变长参数的使用(制作一个多参数多类型求和函数)

template <typename … Args>
class D2 : public Base<Args,>…{};

使用平行都解包方式,即
先参与其他表达式再解包
D2<X,Y,Z> 相当于 D2: public Base<<X,>>, Base<Y,>, Base<Z,>对于每个传入都参数都会调用unpacker函数处理,不会产生递归调用,每次都是平行的,如图2所示:

template <typename ... T>
void DummyWrapper(T... t){}

template <typename T,typename K=double>
T unpacker(const T& t,K &sum){
//这个函数有多少个参数,就会调用几次
//每次传入一个参数,sum变量是为了带回返回值加的
//如果只是打印参数,则不用sum参数
	sum += t;
	return t;
}

template <typename T=double, typename... Args>
T Sum(const Args... data){
	T sum=0;
	DummyWrapper(unpacker(data,sum)...); //直接用unpacker(data)...是非法的
	return sum;
}

int _tmain(int argc, _TCHAR* argv[])
{
	
	//fun(1, 2, 3, "hello", 3.1455);
	cout << Sum(1, 2, 6.6) << endl;
	system("pause");
	return 0;
}

底层的unpacker解包函数平行调用,可以看到调用了三次,因为传入的只有三个参数1,2,6.6:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值