簡體   English   中英

恢復原始類型的Boost變體變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM