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>; //内部自动隐式推导
居然还有这种在运行期隐式生成的对象,,