我想构造一个类型,它是具有不同模板参数类型的同一类的元组。我的意思是:
想象我们有一节课
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
。
你只需要使用包扩展,使用:
using type = std::tuple<A<Args>...>;
将扩展至:
using type = std::tuple<A<Args1>, A<Args2>, ..., A<ArgsN>>;
虽然您的代码不会尝试构造任何东西,但这将编译并提供您想要的内容。
template<class... Args>
struct construct_tuple
{
//assume I can access Args[...]
using type = std::tuple<A<Args>...>;
};