linux下获取对象类型名的方法测试
//============================================================================
// Name : testGetClassName.cpp
// Author : cc
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cxxabi.h>
using namespace std;
class A {
int a;
};
class BB : public A {
int b;
};
class CC : public A {
int c;
};
typedef struct
{
int e;
double f;
}ABC;
typedef enum
{
xxx,
yyy,
}EFG;
int main() {
CC ccObject;
ABC abcObject;
EFG efgObject;
//get class name
const char * const nameClass = typeid(ccObject).name();
int statusClass = 0;
char * const readable_nameClass = abi::__cxa_demangle(nameClass, 0, 0, &statusClass);
::std::cout <<"class mangled_name = "<< nameClass << ::std::endl;
::std::cout <<"class readable_name = "<< readable_nameClass << std::endl;
//get struct name
const char * const nameStruct = typeid(abcObject).name();
int statusStruct = 0;
char * const readable_nameStruct = abi::__cxa_demangle(nameStruct, 0, 0, &statusStruct);
::std::cout <<"struct mangled_name = "<< nameStruct << ::std::endl;
::std::cout <<"struct readable_name = "<< readable_nameStruct << std::endl;
//get enum name
const char * const nameEnum = typeid(efgObject).name();
int statusEnum = 0;
char * const readable_nameEnum = abi::__cxa_demangle(nameEnum, 0, 0, &statusEnum);
::std::cout <<"enum mangled_name = "<< nameEnum << ::std::endl;
::std::cout <<"enum readable_name = "<< readable_nameEnum << std::endl;
return 0;
}
输出结果:
class mangled_name = 2CC
class readable_name = CC
struct mangled_name = 3ABC
struct readable_name = ABC
enum mangled_name = 3EFG
enum readable_name = EFG
可对比windows下