有没有一种方法可以从包含两个变体类型的并集的两个(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/