有没有办法从两个(decltype-decuded)变体类型中声明第三个变体,其中包含这两个变体类型的联合?
发布于 2020-09-24 16:53:29
您可以使用这样的helper类型来进行演绎:
#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>>);https://stackoverflow.com/questions/64042612
复制相似问题