获取原始类型的boost变量变量

时间:2012-03-20 20:01:37

标签: c++ c++11

请您帮我回复放入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

你能帮忙吗?

3 个答案:

答案 0 :(得分:3)

variant::type()会返回std::type_info以获取变体的内容。只是不要使用它来选择如何对变体采取行动 - 这最好是访问者。

答案 1 :(得分:1)

如果您只需要获取变体中所包含类型的文本表示,则可以推出自己的解决方案:

const char* ref_var_typename(const ref_var& v) {
    static const char* types[] = { "macro", "module" };
    return types[v.which()];
}

答案 2 :(得分:0)

无论是否来自variant,都无法(在标准中)获得任何类型的实际C ++类型名称。你能做的最好就是获得type_info,但正如你所看到的那样,这是错误的名称,而不是实际的C ++类型名称。