有什么方法可以将成对的元组剥离为可变参数模板类型或实例化具有可变参数类型的对象?

Rezaebrh

我有一个tuplepair其中每对都有固定类型和变体类型。我想要的是变量类型的列表或使用这些类型定义一个对象(肯定是使用可变模板包构造的)。

根据我如何将tuple<>背面剥离为可变参数模板类型列表?,可以使用的构成类型实例化某些内容tuple但是在这种情况下,我不知道这是否可能,以及如何做到。

想象一下,我有这样的事情:

struct MyFixedType
{ /* ... */ };


using Tuple = std::tuple<
    std::pair<MyFixedType, int>,
    std::pair<MyFixedType, double>,
    std::pair<MyFixedType, std::string>
>;

我有这个课:

template <typename... Ts>
class MyClass
{
};

我想要的是声明MyClasswith的对象<int, double, std::string>

注意:尽管可以使用预处理器或某些宏来处理这种情况,但不允许使用宏。

昆汀

为了简洁起见,使用函数模板参数推导:

template <class Fixed, class... Variant>
MyClass<Variant...> MyClassFromPairTuple_impl(std::tuple<std::pair<Fixed, Variant>...> &&);

template <class Tuple>
using MyClassFromPairTuple = decltype(MyClassFromPairTuple_impl(std::declval<Tuple>()));

用法:

using Tuple = std::tuple<std::pair<MyFixedType, int>, std::pair<MyFixedType, double>, std::pair<MyFixedType, std::string>>;

MyClassFromPairTuple<Tuple> instance; // MyClass<int, double, std::string>

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何具有类型和大小的可变参数模板?

具有相同类型参数的可变参数模板化函数

是否可以构建具有不同类型的可变参数模板?

从具有可变参数模板构造函数的类型构造 std::function 对象

具有元组的C ++可变参数模板

具有可变参数类型的模板多个可变参数继承

具有可变模板类型的DescribeFunction参数

具有相同类型的可变参数模板参数的构造函数无法编译

具有相同参数类型的可变参数模板函数

具有变化的返回类型的可变参数模板参数列表

在C ++中可变参数模板中是否有对函数参数实施类型限制的好方法?

具有可变参数类型的接口方法

C ++创建具有可变参数模板方法的接口

计算可变参数模板元组中的 std::optional 类型

创建从可变参数模板包派生的类型的元组

具有依赖类型的c ++ 11可变参数函数模板是否不明确?

非类型可变参数模板参数

如何检查类型是否从模板函数中的某个可变参数模板类实例化?

C ++:如何在可变参数模板参数上调用带有类型参数的函数?

具有可变参数模板参数的函数指针

从结构中获取所有可变参数模板类型,该结构是函数模板中的类型参数

缺省类型的可变参数模板

可变参数模板类型推导

迭代可变参数模板类型

动态值的可变参数模板类型

可变参数模板中的求和类型

迭代可变参数模板中的类型

具有混合类型参数和非类型可变参数的模板模板参数

如何创建具有可变数量的类型参数的模板?