c++中变体的变体



我有以下变体

std::variant<Type1, Type2<subType1>> myVariant;

Type2是一个模板类,有2种可能的子类型subType1和subType2。是否支持以下操作?

std::variant<Type1, Type2<std::variant<subType1,subType2>> myVariant;

如果是,get<index>(myVariant)如何与内部变体一起工作?

编辑:fix typo

是否支持以下操作?

是的,但不是你想的那样。

std::variant<Type1, Type2<std::variant<subType1, subType2>>> myVariant;

等于:

using SomeType = Type2<std::variant<subType1, subType2>>;
std::variant<Type1, SomeType> myVariant;

SomeType被模板化的事实对变体的工作方式没有任何改变。所以:

如果是,get(myVariant)如何与内部变体一起工作?

get<index>(myVariant)将返回Type1Type2<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>>使用起来要简单得多…

相关内容

  • 没有找到相关文章