在深入了解make\_index\_sequence的过程中,我们提到了其定义涉及到的几个关键组件。其中之一便是辅助别名模板index_sequence的定义。这个模板接受一个变参包Ints,并使用std::integer\_sequence来生成一个整数序列。通过这种方式,我们可以更简洁地处理和生成整数序列,进一步简化编程过程。在探讨
template<class T, T N> using make_integer_sequence = std::integer_sequence<T, /* a sequence 0, 1, 2, ..., N-1 */ >; 起初没有仔细想,以为这种将一个参数N拆出N个元函数参数的效果是靠编译器开洞实现的,像std::declval那样,只有申明没有定义,后来在某个应用场景下用到了这玩意,又仔细考...
这个代码首先定义了一个travel_tuple的函数,并且利用了std::make_index_sequence将tuple类型的参数个数进行了展开,生成了0到N - 1的编译期数字。 接下来我们再利用func_call_tuple函数和展开的编译期数字,依次调用std::get<N>(tuple),并且通过lambda表达式依次的调用,完成了遍历tuple的逻辑。 std::make_index_seq...
嗯,标准库表示它也是这样想的,所以C++17利用了std::make_index_sequence实现了std::apply,开启了满屏幕堆满tuple的C++新时代了~~ 4.小结 C++14新提供的std::make_index_sequence给了我们在编译期操作tuple提供了更加便利的工具,并且在编译期间的整数列也能够帮助我们实现更多新的黑魔法。 大家可以尝试自己用元编程...
std::index_sequence的实现细节可能会因编译器的不同而有所不同,但一般来说,它是通过模板元编程和递归来实现的。它的基本思想是使用模板参数来表示一系列的整数,然后通过模板特化和递归来生成这个序列。 在口语交流中,我们可以这样描述std::index_sequence的实现: “The implementation ofstd::index_sequencemight va...
接着我们来看squere_num函数,这就是我们实际进行平方计算,并生成编译期静态数组的地方了,它的实现很简单,就是依次展开通过std::make_index_sequence生成的数字,并进行平方计算,最后塞到std::array的构造函数之中进行构造。 2. How std::make_index_sequence ...
这是一个使用std::index_sequence和std::make_index_sequence的示例代码: template<typename Function, std::size_t... Indices>void apply_to_samples(Function f, std::index_sequence<Indices...>, const std::array<int, 10>& samples) {(f(samples[Indices]), ...);}template<typename Function>void...
棘手的部分是 std::make_index_sequence 的实现。也就是说:棘手的部分是从 std::make_index_sequence<N> 传递到 std::index_sequence<0, 1, 2, ..., N-1>。 我向您建议一个可能的实现(不是一个很好的实现,但很简单(我希望)可以理解),我将尝试解释它是如何工作的。 Non exactly the standard index...
接着我们来看squere_num函数,这就是我们实际进行平方计算,并生成编译期静态数组的地方了,它的实现很简单,就是依次展开通过std::make_index_sequence生成的数字,并进行平方计算,最后塞到std::array的构造函数之中进行构造。 2. How std::make_index_sequence ...
在C++14中MakeIndexes和IndexTuple已经由utility库提供了,我们可以写得更简洁了,两个函数就可以了。 template<typename F, size_t... I, typename ... Args>staticvoidcall_helper(F f, std::index_sequence<I...>,conststd::tuple<Args...>&tup) ...