正如标题所示,是否有任何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 ++函数可以帮助我们分析源代码:)
答案 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__
不同,您要查找的值无法在编译时计算。