使用gcc,当我使用typeid请求对象/变量的类型时,我得到了与我期望在Windows上获得的type_info :: name方法不同的结果。我用Google搜索了一下,发现RTTI名称是特定于实现的。
问题是,我想获得一个类型的名称,因为它将在Windows上返回。有一个简单的方法吗?
答案 0 :(得分:7)
如果你问的是,没有编译器开关会使gcc的行为与msvc有关type_info::name()
返回的名称。
但是,在您的代码中,您可以依赖gcc特定的__cxa_demangle
函数。
答案 1 :(得分:1)
c ++函数名称实际上包含所有返回和参数类型信息以及类和方法名称。编译时,它们被“修改”成标准格式(每个编译器的标准格式),可以作为汇编符号并包含所有类型信息。
你需要运行一个函数或程序来反转这个错误,称为 demangler 。
尝试运行
c++filt myoutput.txt
关于函数的输出。这个将真正的符号名称解析为人类可读的形式。
答案 2 :(得分:0)
根据另一个问题Is there an online name demangler for C++?,我为此编写了一个在线工具:c++filtjs