G ++内置用于从类对象指针获取类名?

时间:2012-11-17 05:07:31

标签: g++ classname built-in

正如标题所示,是否有任何g ++内置函数(或任何方法)从类对象指针中知道类名? 例如,

class Base {
};
class A : public Base {
};
class B : public Base {
};

void some_func(Base *p) {
    printf("the name of class: %s", __some_g++_builtin_get_class_name(p) );
}

与gcc builtin中的__PRETTY_FUNCTION__类似,我希望有一个内置的g ++函数可以帮助我们分析源代码:)

1 个答案:

答案 0 :(得分:1)

您可以使用typeid。

#include <cstdio>
#include <typeinfo>

class Base {
    virtual int foo() { return 0; }
};
class A : public Base {
};
class B : public Base {
};

void some_func(Base *p) {
    printf("the name of class: %s\n", typeid(*p).name() );
}

int main() {
    some_func(new A);
}

不幸的是,除非您的基类至少有一个虚函数,否则它可能无法执行您想要的操作(否则类型信息可能不可用)。

__PRETTY_FUNCTION__不同,您要查找的值无法在编译时计算。