Integer_Sequence_Reverse_T<int, 4> tmpobj4; //等价于
Integer_Sequence_Reverse<int, 4>::type tmpobj4; //把type看成函数调用
using type = IntSeq_PushFront<Integer_Sequence_Reverse< int,3>::type, 3 >::type;
//展开上行后面这个Integer_Sequence_Reverse< int,3>::type如下
using type = IntSeq_PushFront<Integer_Sequence_Reverse< int,2>::type, 2 >::type;
//展开上行后面这个Integer_Sequence_Reverse< int,2>::type如下
using type = IntSeq_PushFront<Integer_Sequence_Reverse< int,1>::type, 1 >::type;
//展开上行后面这个Integer_Sequence_Reverse< int,1>::type,调用的是特化版本
using type = std::integer_sequence<int, 0>; //递归结束往回返
using type = std::integer_sequence<int, 1,0>
using type = std::integer_sequence<int, 2,1,0>
using type = std::integer_sequence<int,3,2,1,0>
//最终结果
std::integer_sequence<int,3,2,1,0>
【将一个数字重复多次生成一个类型Repeat_Integer】
前面是通过递归调用的方式实现。现在这里通过递归继承的方式实现。
//泛化版本
template <std::size_t Num,std::size_t RepeatTime, typename INTSEQ = std::integer_sequence<std::size_t> > // INTSEQ代表整个的std::integer_sequence< ......>类型
class Repeat_Integer;
//特化版本1:
template <std::size_t Num, std::size_t RepeatTime, std::size_t... index >
class Repeat_Integer<Num, RepeatTime, std::integer_sequence<std::size_t, index...> > :
public Repeat_Integer<Num, RepeatTime - 1, std::integer_sequence<std::size_t, index..., Num>>
{
};
//特化版本2(用于结束递归)
template <std::size_t Num, std::size_t... index >
class Repeat_Integer<Num, 0, std::integer_sequence<std::size_t, index...> >
{
public:
using type = std::integer_sequence<std::size_t, index...>;
};
//定义别名模板
template <std::size_t Num, std::size_t RepeatTime>
using Repeat_Integer_T = typename Repeat_Integer<Num, RepeatTime>::type;