请您帮我回复放入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
答案 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 ++类型名称。