Ints...>){((std::cout<<Ints<<' '),...);}intmain(){// 创建一个包含 0, 1, 2, 3, 4 的序列autoseq=std::make_integer_sequence<int,5>{};// 打印序列中的所有数字print_sequence(seq);}
typename Tup> auto my_apply(T&& obj, Tup&& tup) { make_sequence<std::tuple_size_v<std...
问std::make_integer_sequence究竟是如何实现的?EN目前,没有一个主要的编译器标准库提供N3658编译时整...
template<size_t..Ints>using index_sequence=std::integer_sequence<size_t,Ints...>; 通常我们不会直接使用std::integer_sequence,而是通过定义一个size_t的std::integer_sequnece命名为index_sequence。 2.3 std::make_index_sequence 这里就是生成了一组数字序列0,1,2,3...N - 1的一组std::index_se...
通常我们不会直接使用std::integer_sequence,而是通过定义一个size_t的std::integer_sequnece命名为index_sequence。 2.3 std::make_index_sequence 这里就是生成了一组数字序列0,1,2,3...N - 1的一组std::index_sequence。然后就可以利用这组序列的数字做任何我们想做的事情了。
using index_sequence_for = std::make_index_sequence<sizeof...(T)>; 下面的代码演示了使用std::integer_sequence创建一个含有元素0, 1, 2, 3, …, 9的vector。通过第13行的模板参数10,推导出第5行的模板参数组为0, 1, 2, 3, …, 9。
C++14在标准库里添加了一个很有意思的元函数: std::integer_sequence。并且通过它衍生出了一系列的帮助模板: std::make_integer_sequence, std::make_index_sequence, std:: index_sequence_for。在新的黑魔法的加持下,它可以帮助我们完成在编译期间获取了一组编译期整数的工作。
integers> struct make_integer_sequence_helper<T, N, N, integers...> { using type = std::integer_sequence<T, integers...>; }; } template<class T, T N> using make_integer_sequence = detail::make_integer_sequence_helper<T, 0, N>::type;...
template <class T, T... Ints> class integer_sequence; template <std::size_t... Ints> using index_sequence = std::integer_sequence<std::size_t, Ints...>; 并为它生成元函数: template <class T, T N> using make_integer_sequence = std::integer_sequence<T, /* a sequence 0, 1,...
这里,std::size_t N是一个模板参数,表示生成的序列的大小。std::make_integer_sequence是一个模板,它生成一个包含从0到N-1的整数序列的类型。std::index_sequence_for则是一个模板别名,它根据给定的类型生成一个std::index_sequence。 在实际编程中,我们通常使用std::make_index_sequence来生成一个索引序列,然...