以编程方式检索c ++类名称

我想知道是否有可能在C ++中以stringforms检索类的名称,而不必将其硬编码为variables或getter。 我知道,没有任何信息是在运行时实际使用,因此它是不可用的,但是有没有可以创build此function的macros?

编辑:可能是有帮助的注意到,我实际上是试图检索派生类的名称,而我正在使用Visual C ++ 2008速成版。

你可以使用typeid

 #include <typeinfo> cout << typeid(obj).name() << endl; 

然而,这是不鼓励的,因为格式不规范,并且可能在不同的编译器(甚至相同的编译器的不同版本)之间有所不同。

如果你只是想检查是否是某一类,那么

 typeid(obj) == typeid(CSubClass) 

将始终工作,无论实施。

否则,一个方便的方法是声明:

 virtual const char* classname() { return "CMyClass";} 

并实现每个子类。

typeid(obj).name()事物总是给出variables的声明types,而不是对象的实际types(类)。 如果将variablesobj分配给obj被声明为的类的子类的实例,那么typeid不会显示出来,不幸的是。