c++模板的奇淫技巧代码

c++模板复杂的一个原因就是类型推导参数包装过深,人脑无法记忆那么多位置,在看make_shared的时候遇到这么个代码,外国人少是有原因的。。

template<size_t... _Vals>
	struct _Maximum;

template<>
	struct _Maximum<>
	{	// maximum of nothing is 0
	static constexpr size_t value = 0;
	};

template<size_t _Val>
	struct _Maximum<_Val>
	{	// maximum of _Val is _Val
	static constexpr size_t value = _Val;
	};

template<size_t _First,
	size_t _Second,
	size_t... _Rest>
	struct _Maximum<_First, _Second, _Rest...>
		: _Maximum<(_First < _Second ? _Second : _First), _Rest...>
	{	// find maximum value in _First, _Second, _Rest...
	};

这个代码传递任意的可变参,也能得到value,隐含了一个递归的继承,我也看了很久才发现的,

eg: _Maximum<first,seconed,third,four>:_Maximum<second,third,four>;    //外部调用时使用最有一个特列化

        _Maximum<second,third,four>: _Maximum<third,four>;   //内部自动隐式推导

        _Maximum<third,four>: _Maximum<four>;   //内部自动隐式推导

居然还有这种在运行期隐式生成的对象,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值