c++ - 加入std::variant <a,b,c>和std::variant <x,y,z>的类型

标签 c++

有没有一种方法可以从包含两个变体类型的并集的两个(decltype-decuded)变体类型中声明第三个变体?

最佳答案

您可以使用此类帮助程序类型进行推导:

#include <variant>

template <class ...Args>
struct VariantUnionHelper;

template <class ...Args1, class ...Args2>
struct VariantUnionHelper<std::variant<Args1...>, std::variant<Args2...>> {
    using type = std::variant<Args1..., Args2...>;
};
连同方便的类型别名
template <class Variant1, class Variant2>
using VariantUnion = typename VariantUnionHelper<Variant1, Variant2>::type;
这允许以下用例
using Var1 = std::variant<int, long, short>;
using Var2 = std::variant<bool, char, double>;
VariantUnion<Var1, Var2> joined;
并通过以下编译时检查。
#include <type_traits>

static_assert(std::is_same_v<VariantUnion<Var1, Var2>,
     std::variant<int, long, short, bool, char, double>>);

关于c++ - 加入std::variant <a,b,c>和std::variant <x,y,z>的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64042612/

相关文章:

c++ - 如何获得枚举的基本类型?

c++ - 为什么模板参数只能在一种情况下推导出来?

c++ - 我们可以重载 malloc() 吗?

C++ undefined reference (静态成员)

c++ - 成员数组包含类的实例。无法决定将修改此类变量的方法放在哪里

c++ - 使用 boost::interprocess 在共享内存中分配用户定义的结构

c++ - 增量增长元组

c++ - 在 C++ 中编译复数类时出错

c++ winapi listview项目已选中但未突出显示

c++ - 删除数组指针?