lixpam
3/25/2020 - 10:27 AM

获取对象类型

#include <typeinfo>

/*
 * C++并没有规定typeid实现标准,各个编译器可能会不一样
 * 有些编译器name()函数会得到可阅读类型字符串,有些不会(如gcc)
 * 每种类型的type_info数据长度依赖于类型名称,至少9个字节。GCC中16字节(两个指针:vptr和name指针)
 */
 
/*
 * 可以通过abi::__cxa_demangle获取到可阅读类型字符串
 */

const char *str = "hello";
const type_info &ti = typeid(str);
cout << "str type name: " << ti.name() << endl;   // str type name: PKc

#include <cxxabi.h>
int status;
char *realtype = abi::__cxa_demangle(ti.name(), 0, 0, &status);
cout << "str realtype: " << realtype << endl;   // str realtype: char const*
free(realtype);  // 手动释放