0

正如标题所问,它们是从类对象指针中知道类名的任何 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++ 的内置函数可以帮助我们分析源代码:)

4

1 回答 1

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__,您要查找的值无法在编译时计算。

于 2012-11-17T05:20:55.217 回答