我有如下的變體
std::variant<Type1, Type2<subType1>> myVariant。
Type2是一個模板類,有2個可能的子型別subType1,和subType2是可能的。 下面的情況是否支持?
std::variant<Type1, Type2<std::variant<subType1,subType2>>myVariant;
如果是,get<index>(myVariant)將如何與內部變數一起作業?
編輯:修改錯別字
uj5u.com熱心網友回復:是否支持以下內容?
是的,但不是你想象的那樣。
std::variant<Type1, Type2<std::variant<subType1, subType2>>myVariant。
是同一件事:
using SomeType = Type2<std::variant<subType1, subType2> >。
std::variant<Type1, SomeType>myVariant。
事實上,SomeType是模板化的,對變數的作業方式沒有任何改變。所以:
如果是的話,get(myVariant)將如何與內部變數一起作業呢?
uj5u.com熱心網友回復: 問題在于,
這既不是一個 所以在這里 在現實世界的編程中,我認為
標籤:get<index>(myVariant)將回傳一個Type1或者一個Type2<std::variant<subType1, subType2>>/code>。內部變體不會以任何形式出現。
std::variant是一個新的型別,并且與它可以容納的所有型別不同。就像一個好的老聯盟:union int_or_double {
int i;
double d。
};
int,也不是一個double,而是一個可以容納int值或double值的不同型別。std::variant<Type1, Type2<std::variant<subType1,subType2>>myVariant;/code>不能只持有Type2<std:: variant<subType1,subType2>>但既不是Type2<subType1>,也不是Type2<subType2>(當然還有Type1。 ..).std::variant<Type1, Type2<subType1>, Type2<subType2>>使用起來會簡單得多...
