直接传递给函数的参数包可以在没有任何特殊库帮助程序的进行解压缩。 当参数包属于传递给函数的类型,并且需要索引来访问元素时,对它进行解压缩的最简单方法是使用integer_sequence及其相关类型别名make_integer_sequence、index_sequence、make_index_sequence和index_sequence_for。
直接传递给函数的参数包可以在没有任何特殊库帮助程序的进行解压缩。 当参数包属于传递给函数的类型,并且需要索引来访问元素时,对它进行解压缩的最简单方法是使用integer_sequence及其相关类型别名make_integer_sequence、index_sequence、make_index_sequence和index_sequence_for。
Ints...>){((std::cout<<Ints<<' '),...);}intmain(){// 创建一个包含 0, 1, 2, 3, 4 的序列autoseq=std::make_integer_sequence<int,5>{};// 打印序列中的所有数字print_sequence(seq);}
注意:由于std::integer_sequence是一个模板类,它通常不会直接实例化,而是作为其他模板类(如std::index_sequence)的底层实现。上面的示例仅用于展示如何引用std::integer_sequence,但在实际使用中,你可能需要使用像std::make_index_sequence这样的工具来生成std::integer_sequence的实例。考虑...
std::integer_sequence<T,N...>其辅助类模板为std::make_integer_sequence<T,N>,两者的数据类型通常是int,long,float、double、size_t. std::index_sequence是std::integer_sequence<std::size_t, N...>的一个特殊别名:其数据类型限定为size_t,对应的辅助类模板为std::make_index_sequence<N>。 前面笔...
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;...
using index_sequence = std::integer_sequence<std::size_t, Ints...>;分别定义辅助模板 std::make_integer_sequence 与std::make_index_sequence 以简化以 0, 1, 2, ..., N-1 为Ints 创建std::integer_sequence 与std::index_sequence: template...
C++ integer_sequence 1 #include <tuple> 2 #include <iostream> 3 #include <utility> 4 5 template<typename F, typename T, std::size_t... I> 6 decltype(auto) apply_impl(F f, const T& t, std::index_sequence<I...>) 7 { 8 return f(std::get<I>(t)...); 9 } 10 11 ...
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。
Ints> struct integer_sequence; 这个模板类接受一个整数类型 T 和一系列整数值 Ints 作为模板参数。这些整数值被用来表示一个整数序列。例如,std::integer_sequence<int, 0, 1, 2, 3> 表示整数序列 {0, 1, 2, 3}。 通常,std::integer_sequence 与变参模板函数一起使用,以在编译时生成参数包展开的索...