我可以解读GCC的RTTI名称吗?

时间:2010-01-18 10:16:52

标签: c++ g++ rtti name-mangling

使用gcc,当我使用typeid请求对象/变量的类型时,我得到了与我期望在Windows上获得的type_info :: name方法不同的结果。我用Google搜索了一下,发现RTTI名称是特定于实现的。

问题是,我想获得一个类型的名称,因为它将在Windows上返回。有一个简单的方法吗?

3 个答案:

答案 0 :(得分:7)

如果你问的是,没有编译器开关会使gcc的行为与msvc有关type_info::name()返回的名称。

但是,在您的代码中,您可以依赖gcc特定的__cxa_demangle函数。

事实上an answer on SO that addresses your problem

参考:libstdc++ manual, Chapter 40. Demangling

答案 1 :(得分:1)

c ++函数名称实际上包含所有返回和参数类型信息以及类和方法名称。编译时,它们被“修改”成标准格式(每个编译器的标准格式),可以作为汇编符号并包含所有类型信息。

你需要运行一个函数或程序来反转这个错误,称为 demangler

尝试运行

c++filt myoutput.txt

关于函数的输出。这个将真正的符号名称解析为人类可读的形式。

答案 2 :(得分:0)

根据另一个问题Is there an online name demangler for C++?,我为此编写了一个在线工具:c++filtjs