有没有一种方法可以从两个现有的变量类型中声明第三个变量,其中包含两个变量类型的并集?
#include <variant>
using Var1 = std::variant<int, bool>;
using Var2 = std::variant<float, double>;
// both lines should yield the same
using MergedVariant = VariantUnion<Var1, Var2>; // <-- how to do this?
using MergedVariant = std::variant<int, bool, float, double>; // expected
2条答案
按热度按时间ryhaxcpt1#
您可以使用这样的帮助器类型进行演绎:
与方便的类型别名一起使用
这允许以下使用情形
并通过以下编译时检查。
zphenhs42#
lubgr形式的解决方案很好,但有一些缺点。它只接受两个参数,只适用于
std::variant
,不考虑样式中的命名:struct X
和using X_t
类似于STL。https://godbolt.org/z/T37KE81nf
我不喜欢
template_concat
的名字,但我不能拿出更好的版本。