从模板参数类型构造类类型的元组

问题描述 投票:0回答:2

我想构造一个类型,它是具有不同模板参数类型的同一类的元组。我的意思是:

想象我们有一节课

template<class Arg>
class A
{
    //.... details
}

我想定义类似的东西:

template<class... Args>
struct construct_tuple 
{
    //assume I can access Args[...]
    using type = std::tuple<A<Args[0]>, A<Args[1]>, ..., A<Args[n]>>;
}

你能帮忙吗?

我相信可能有一个解决方案,通过迭代可变参数并使用元组类型之间的串联或者使用其他一些 TMP,例如

std::enable_if
std::conditional_t

c++ tuples metaprogramming variadic-templates
2个回答
0
投票

你只需要使用包扩展,使用:

using type = std::tuple<A<Args>...>;

将扩展至:

using type = std::tuple<A<Args1>, A<Args2>, ..., A<ArgsN>>;

0
投票

虽然您的代码不会尝试构造任何东西,但这将编译并提供您想要的内容。

template<class... Args>
struct construct_tuple 
{
    //assume I can access Args[...]
    using type = std::tuple<A<Args>...>;
};
© www.soinside.com 2019 - 2024. All rights reserved.