[英]Getting back original type of boost variant variable
您能幫我找回放入boost::variant
的原始對象的boost::variant
嗎?
我有這樣的東西
typedef boost::variant<macro,module> ref_var;
是否可以找回原始對象的類型名稱? 在這種情況下(宏或模塊)
我正在嘗試使用
typeid(v).name()
但這給了我一個既不是宏又不是模塊的怪異名稱:
PN5boost7variantI5macro6moduleNS_6detail7variant5void_ES5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_EE
你能幫忙嗎?
variant::type()
返回std::type_info
作為變量的內容。 只是不要用它來選擇對變體的處理方式-最好由訪問者完成。
如果您只需要找回變體中所包含類型的文本表示,則可以推出自己的解決方案:
const char* ref_var_typename(const ref_var& v) {
static const char* types[] = { "macro", "module" };
return types[v.which()];
}
(在標准中)沒有辦法獲得任何類型的實際C ++類型名,無論是否從variant
。 最好的辦法是獲取type_info
,但是如您所見,這是錯誤的名稱,而不是實際的C ++類型名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.