这个代码首先定义了一个travel_tuple的函数,并且利用了std::make_index_sequence将tuple类型的参数个数进行了展开,生成了0到N - 1的编译期数字。 接下来我们再利用func_call_tuple函数和展开的编译期数字,依次调用std::get<N>(tuple),并且通过lambda表达式依次的调用,完成了遍历tuple的逻辑。 std::make_index_seq...
typename Tup> auto my_apply(T&& obj, Tup&& tup) { make_sequence<std::tuple_size_v<std...
然而,这种方法相比于使用std::index_sequence和std::make_index_sequence来说,代码更加复杂,可读性也较差。这也是为什么C++14引入了std::index_sequence和std::make_index_sequence的原因之一,它们使得编译时的元组处理变得更加简单和直观。 7. 结论 7.1 读完整篇,没发现std::index_sequence和std::make_index_sequen...
在口语交流中,我们通常会这样描述std::index_sequence和std::make_index_sequence:“std::index_sequence is a template class that generates a compile-time sequence of integers. The sequence starts from 0 and increments by 1 for each element. std::make_index_sequence is a template alias that genera...
棘手的部分是 std::make_index_sequence 的实现。也就是说:棘手的部分是从 std::make_index_sequence<N> 传递到 std::index_sequence<0, 1, 2, ..., N-1>。 我向您建议一个可能的实现(不是一个很好的实现,但很简单(我希望)可以理解),我将尝试解释它是如何工作的。 Non exactly the standard index...
这个代码首先定义了一个travel_tuple的函数,并且利用了std::make_index_sequence将tuple类型的参数个数进行了展开,生成了0到N - 1的编译期数字。 接下来我们再利用func_call_tuple函数和展开的编译期数字,依次调用std::get<N>(tuple),并且通过lambda表达式依次的调用,完成了遍历tuple的逻辑。
接着我们来看squere_num函数,这就是我们实际进行平方计算,并生成编译期静态数组的地方了,它的实现很简单,就是依次展开通过std::make_index_sequence生成的数字,并进行平方计算,最后塞到std::array的构造函数之中进行构造。 2. How std::make_index_sequence ...
问std::make_integer_sequence究竟是如何实现的?EN目前,没有一个主要的编译器标准库提供N3658编译时...
using index_sequence = std::integer_sequence<size_t,Ints...>; 1. 2. 通常我们不会直接使用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。然后...
第一个实例(std::make_index_sequence<N>)用于模板参数列表。它才表示模板类型参数 Indices 默认为类型 std::make_index_sequence<N>。没有在那里创建任何内容,使用是声明性的。 第二个例子(std::make_index_sequence<Size>{})正在创建该类型的默认构造实例。这 {} 是初始化的新C ++语法。当括号为空时,对...