gpt4 book ai didi

c++ - 是否可以创建模板模板参数列表?

转载 作者:行者123 更新时间:2023-11-27 22:37:31 27 4
gpt4 key购买 nike

我想知道是否可以制作一个包含模板模板参数的列表,比如

template <
template <typename...> class TTP0,
template <typename...> class... TTPs
>
struct TTP_List : TTP_List<TTPs...> {};

我遇到的一个问题是我不知道访问列表元素的好方法,即TTP0。 .我想使用类型别名,typedefusing .然而,我知道这是不可能的,因为模板模板参数不是类型,因此不能被视为类型。

我能想到的一种工作方法是制作显式结构来读取数据并使其使用专门化,例如:

template <template <typename...> class>
struct container_TTPs;

template <template <typename...> class TTP>
struct container_TTPs<std::vector> {};

但是,这种方法似乎非常明确。有没有一种方法可以在不使用模板特化的情况下完成这种识别?

请随时询问我是否需要详细说明。

编辑:例如,我希望能够对每种保留类型使用某些表达式,例如 TestClass<TTP_List<std::vector, std::list>>::value , 其中TestClass使用 std::vector 和 std::list,不需要 TestClass 中的可变参数模板, 所以多个 TTP_List s可以通过。

最佳答案

我不明白“访问列表的元素”是什么意思。

在我看来,你应该给我们一个例子,说明你想要什么,具体地说,访问列表的元素。

无论如何,您可以使用 using 来“访问”(?) 类型名

template <typename T0, typename ... Ts>
struct foo
{
using type = T0;
};

您可以使用模板 using 来“访问”(?)模板模板参数,如下所示

template <template <typename...> class T0, 
template <typename...> class ... Ts>
struct foo
{
template <typename ... As>
using templ_type = T0<As...>;
};

你可以这样使用它

// vi is a std::vector<int>
foo<std::vector, std::set, std::map>::templ_type<int> vi { 0, 1, 2 };

关于c++ - 是否可以创建模板模板参数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52390604/

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