c++模板实现多参数任意传 - 类实现

之前写的有篇文章是用方法实现的变长参数,这边就是用类实现的,更加高大上,这样就可以对不同的实例对象进行处理。 

下面是《深入理解c++11》书中的截图




下面是自己实现的代码

//--------------------- 实现模板的递归 begin ------------------
template < typename... Args>
class MultiArgs; //变长模板声明,一定要最上面,不然编译报错

template <>
class MultiArgs<> {}; //边界条件,终止继承递归

template < typename T, typename... Args>
class MultiArgs<T, Args...> : public MultiArgs<Args...> //偏特化递归定义
{
public:
	MultiArgs(T _t, Args... _args) : MultiArgs<Args...>(_args...)
	{ 
		value = _t;
		std::cout << "--- addr:0x" << this << ", value:" << _t << std::endl;
		//TODO:这里可以实现处理参数_t的逻辑,
		//比如丢重载各种匹配参数的函数,到自定义数据结构的容器中
	}
public:
	T value;
};
//--------------------- 实现模板的递归 begin ------------------

template <typename... Args>
void sendMsg(Args... _args)
{
	//计算变长报的长度:sizeof...(Args)
	int argsLength = sizeof...(Args);
	std::cout << "--- _args length:" << argsLength << std::endl; //多参数使用时一定要带上...
	MultiArgs<Args...> ma(_args...);
}

void testArgsForClass()
{
	sendMsg(111, "yang", 22.22f, true);
}
/*
结果:
--- _args length:4
--- addr:0x0016F72C, value:1
--- addr:0x0016F72C, value:22.22
--- addr:0x0016F72C, value:yang
--- addr:0x0016F72C, value:111
类的初始化顺序是先初始化构造函数:后面的东西,再初始化{}块里的东西,
所以打印的顺序是传入sendMsg参数时的顺序反过来
*/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蝶泳奈何桥.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值