gpt4 book ai didi

c++ - 有没有办法提取模板的参数列表以放入另一个元函数?

转载 作者:行者123 更新时间:2023-11-30 03:57:34 26 4
gpt4 key购买 nike

假设我有一个 get_at 元函数,它从可变参数模板参数列表中获取第 N 个类型:

template <int I, typename ...Ts>
struct get_at;

template <int I, typename T, typename ...Ts>
struct get_at<I, T, Ts...> : public get_at<I-1, Ts...>
{
};

template <typename T, typename ...Ts>
struct get_at<0, T, Ts...> : public std::true_type
{
typedef T type;
};

template <int I>
struct get_at<I> : public std::false_type
{
};

我想将 Ts... 存储在列表类型中,如下所示:

template <typename... Ts>
struct list {};

如何从包含的 list 类型中获取 Ts... 以便将其放入 get_at 元函数中?

最佳答案

你不必。只需编写另一个元函数(任何问题都可以通过另一层间接来解决吗?):

template <int I, typename Seq>
struct get_at_seq;

template <int I, typename... Ts>
struct get_at_seq<I, list<Ts...>>
: get_at<I, Ts...>
{ };

甚至:

template <int I, template <typename...> class C, typename... Ts>
struct get_at_seq<I, C<Ts...>>
: get_at<I, Ts...>
{ };

请注意,从 true_typefalse_type 继承对于这个用例没有意义。您覆盖了 type,但是您在 get_at 上仍然有 operator bool(),这对于这种用法没有任何意义。最好只明确地写入 value,例如:

template <typename T, typename ...Ts>
struct get_at<0, T, Ts...>
{
typedef T type;
static constexpr bool value = true;
};

关于c++ - 有没有办法提取模板的参数列表以放入另一个元函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27889535/

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