先修知识:
类模板的编写。
类模板的偏特化。
模板参数包
直接上代码
巧思
一
template <int _This, class _Rest>
struct mtuple_element;
这个类模板的原型。
二
template <size_t _Index, class _This, class... _Rest>
struct mtuple_element<_Index, tuple<_This, _Rest...>>
: mtuple_element<_Index - 1, tuple<_Rest...>> {};
这是mtuple_element这个类模板的偏特化。
设计的巧妙就在继承上面。
众所周知在面向对象编程的继承里面,要先有父类才能构造出子类。而随着_Indexb不断缩小,构造呈现出一种递归的趋势。
三
那递归肯定不能无穷无尽的一直递归下去,要有一个中止的条件。中止条件就是当_Index等于0时不在继承他自身递归就完成了然后不断的返回从而完成上面mtuple_element的构造。
//中止条件
template <class _This, class... _Rest>
struct mtuple_element<0, tuple<_This, _Rest...>> {
using type = _This;
};
这个也是mtuple_element这个类模板的偏特化。
当_Index的值等于0时就会调用这个类然后上面第一个mtuple_element 这个类就会构造完成。