6.1.1 使用 std::integer_sequence 创建序列 6.1.2 使用 std::make_integer_sequence 生成序列 6.2 高级应用示例 6.2.1 使用 std::integer_sequence 进行函数参数解包 6.2.2 使用 std::integer_sequence 进行编译时排序 第七章: 总结与展望 7.1 std::integer_sequence 在现代 C++ 中的地位 7.2 未来发展趋势 ...
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>usingindex_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...
std::integer_sequence 最直接的应用是生成编译时的整数序列。这个功能虽然看似简单,但在模板元编程中却极为强大,能够为更复杂的编译时计算提供支持。我们将通过一系列示例来展示 std::integer_sequence 的基本用法。 示例1:生成序列 假设我们需要一个包含 0 到 N-1 的整数序列。C++14 提供了 std::make_integer...
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。
通常我们不会直接使用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。然后就可以利用这组序列的数字做任何我们想做的事情了。
C++14在标准库里添加了一个很有意思的元函数: std::integer_sequence。并且通过它衍生出了一系列的帮助模板: std::make_integer_sequence, std::make_index_sequence, std:: index_sequence_for。在新的黑魔法的加持下,它可以帮助我们完成在编译期间获取了一组编译期整数的工作。
这里,std::size_t N是一个模板参数,表示生成的序列的大小。std::make_integer_sequence是一个模板,它生成一个包含从0到N-1的整数序列的类型。std::index_sequence_for则是一个模板别名,它根据给定的类型生成一个std::index_sequence。 在实际编程中,我们通常使用std::make_index_sequence来生成一个索引序列,然...
using make_integer_sequence = std::integer_sequence<T, /* a sequence 0, 1, 2, ..., N-1 */ >; template<std::size_t N> using make_index_sequence = std::make_integer_sequence<std::size_t, N>;若N 为负则程序为谬构。若 N 为零,则指示类型为 integer_sequence<T>。