這就是我想做的事:的boost ::變種得到最後一次訪問類型
boost::variant a<int, string>;
int b;
a=4;
b=a; //doesn't work. What is the easiest way to make b=4?
我知道我可以用得到,但我希望能夠做到這一點不指定類型。我可以用apply_visitor和訪問者對象來實現,但我想知道是否有更簡單的方法。
這就是我想做的事:的boost ::變種得到最後一次訪問類型
boost::variant a<int, string>;
int b;
a=4;
b=a; //doesn't work. What is the easiest way to make b=4?
我知道我可以用得到,但我希望能夠做到這一點不指定類型。我可以用apply_visitor和訪問者對象來實現,但我想知道是否有更簡單的方法。
如果您有支持的C++ 0x編譯器,你可以用驚人decltype
:
boost::variant a<int, string>;
int b;
a = 4;
b = boost::get<decltype(b)>(a);
我不知道爲什麼你要做到這一點,雖然,因爲你已經知道的類型。
沒有。
您可以撥打variant<>::which()
得到variant<>
的當前初始化類型或variant<>::type()
的指數以獲得std::type_info
爲當前初始化的類型,但也沒有辦法提取比get<>
其他當前初始化類型的值和apply_visitor
。
你可以寫一個輔助函數:
template <class V, typename T>
copy_variant(const V& v, T& t) { t = get<T>(v); }
// ...
copy_variant(a, b);
但嚴重的是,我認爲這會花費你更多比它給你買。
請注意,如果'a'與'b'不具有相同的類型,則會拋出。所以它是非常脆弱的代碼;這就是爲什麼你通常希望使用訪問者來處理「變體」。 –