1. 在代码中添加 #include <cxxabi.h>头文件
2. 调用函数abi::__cxa_demangle()
3. 函数原型
char * __cxa_demangle (const char *mangled_name, char *output_buffer, size_t *length, int *status)
参数说明:
mangled_name: 受损名称(用typeid(type).name()所得到的不正确的名称传给它)。
output_buffer: 得到的正确名称存放的缓冲。
length: output_buffer长度
status:返回的状态
1. 0 操作成功
2. -1 存储缓冲分配失败
3. -2 在C++ ABI 名称重构规则下的到的重构名称无效
4. -3 函数传入了一个无效参数
4. 返回值为重构后的正确类型名
5. 代码示例
#include <iostream>
#include <cxxabi.h>
class a{};
class b:public a{};
using namespace std;
int main()
{
a *aa;
cout<<"int_id="<<typeid(int).name()<<endl;
cout<<"abi::__cxa_demangle int_id="<<abi::__cxa_demangle(typeid(int).name(),0,0,0)<<endl;
cout<<"double_id="<<abi::__cxa_demangle(typeid(double).name(),0,0,0)<<endl;
cout<<"a_id="<<abi::__cxa_demangle(typeid(a*).name(),0,0,0)<<endl;
cout<<"*aa_id="<<abi::__cxa_demangle(typeid(*aa).name(),0,0,0)<<endl;
cout<<"b_id="<<abi::__cxa_demangle(typeid(b).name(),0,0,0)<<endl;
cout<<"int_id="<<abi::__cxa_demangle(typeid(int*).name(),0,0,0)<<endl;
return 0;
}
6. GCC参考文档