gpt4 book ai didi

c++ - 有人可以解释使用递归模板生成整数序列吗?

转载 作者:行者123 更新时间:2023-11-30 05:09:42 24 4
gpt4 key购买 nike

我在 this answer 中遇到过这段代码我无法解释它到底做了什么以及我如何将它用作整数的编译时间序列。

template <size_t ...I>
struct index_sequence {};

template <size_t N, size_t ...I>
struct make_index_sequence : public make_index_sequence<N - 1, N - 1, I...> {};

template <size_t ...I>
struct make_index_sequence<0, I...> : public index_sequence<I...> {};

我之前发现过类似的实现,即herehere ,但从来不知道如何理解语法。我不明白 make_index_sequence 的两个模板结构定义,特别是带有 public 的部分(例如 : public make_index_sequence<N - 1, N - 1, I...> )。有人可以给我解释一下吗?

这里有继承吗?递归如何工作?序列存储在哪里?

编辑:这些模板生成的整数序列的示例用法是生成用于访问 std::tuple<> 的索引。 .生成器会在编译时为元组中的每个元素生成一个索引。

最佳答案

Is there any inheritance happening here?

是的:

template <size_t N, size_t ...I>
struct make_index_sequence : public make_index_sequence<N - 1, N - 1, I...>
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

struct make_index_sequence<N,...>继承struct make_index_sequence<N-1,N-1,...> .

How does the recursion work?

通过继承并提供另一部分可变参数模板参数包。

N==0 的特化时递归停止满足了。

Where is the sequence stored?

template <size_t ...I>
struct index_sequence {};
的可变参数模板参数包中

关于c++ - 有人可以解释使用递归模板生成整数序列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46028666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com