C++ 中变体的变体
Variant of variants in C++
我有以下变体
std::variant<Type1, Type2<subType1>> myVariant;
Type2 是一个模板 class,有 2 种可能的子类型 subType1 和 subType2 都是可能的。
以下是否受支持?
std::variant<Type1, Type2<std::variant<subType1,subType2>> myVariant;
如果是,get<index>(myVariant)
将如何使用内部变体?
编辑:修正拼写错误
Is the following supported?
是的,但不是你想的那样。
std::variant<Type1, Type2<std::variant<subType1, subType2>>> myVariant;
等同于:
using SomeType = Type2<std::variant<subType1, subType2>>;
std::variant<Type1, SomeType> myVariant;
SomeType
是模板化的事实不会改变变体的工作方式。所以:
If yes, how would get(myVariant) work with the inner variant?
get<index>(myVariant)
将 return 成为 Type1
或 Type2<std::variant<subType1, subType2>>
。内部变体不会以任何方式发挥作用。
问题是 std::variant
是一种新类型,不同于它可以容纳的所有类型。就像一个好的老工会:
union int_or_double {
int i;
double d;
};
既不是 int
也不是 double
,而是一种可以包含 int
值或 double
值的不同类型。
所以这里 std::variant<Type1, Type2<std::variant<subType1,subType2>> myVariant;
不仅可以保存 Type2<std::variant<subType1,subType2>>
的值,也可以保存 Type2<subType1>
和 Type2<subType2>
的值(当然还有 Type1
...)。
在现实世界的编程中,我认为 std::variant<Type1, Type2<subType1>, Type2<subType2>>
使用起来会简单得多...
我有以下变体
std::variant<Type1, Type2<subType1>> myVariant;
Type2 是一个模板 class,有 2 种可能的子类型 subType1 和 subType2 都是可能的。 以下是否受支持?
std::variant<Type1, Type2<std::variant<subType1,subType2>> myVariant;
如果是,get<index>(myVariant)
将如何使用内部变体?
编辑:修正拼写错误
Is the following supported?
是的,但不是你想的那样。
std::variant<Type1, Type2<std::variant<subType1, subType2>>> myVariant;
等同于:
using SomeType = Type2<std::variant<subType1, subType2>>;
std::variant<Type1, SomeType> myVariant;
SomeType
是模板化的事实不会改变变体的工作方式。所以:
If yes, how would get(myVariant) work with the inner variant?
get<index>(myVariant)
将 return 成为 Type1
或 Type2<std::variant<subType1, subType2>>
。内部变体不会以任何方式发挥作用。
问题是 std::variant
是一种新类型,不同于它可以容纳的所有类型。就像一个好的老工会:
union int_or_double {
int i;
double d;
};
既不是 int
也不是 double
,而是一种可以包含 int
值或 double
值的不同类型。
所以这里 std::variant<Type1, Type2<std::variant<subType1,subType2>> myVariant;
不仅可以保存 Type2<std::variant<subType1,subType2>>
的值,也可以保存 Type2<subType1>
和 Type2<subType2>
的值(当然还有 Type1
...)。
在现实世界的编程中,我认为 std::variant<Type1, Type2<subType1>, Type2<subType2>>
使用起来会简单得多...