我想知道在C++中是否有可能以字符串形式检索类的名称而无需将其硬编码为变量或getter.我知道这些信息实际上并没有在运行时使用,因此它不可用,但有没有可用于创建此功能的宏?
编辑:可能有助于注意我实际上是在尝试检索派生类的名称,而我正在使用Visual C++ 2008 Express Edition.
Kon*_*lph 88
你可以使用typeid
:
#include <typeinfo>
cout << typeid(obj).name() << endl;
Run Code Online (Sandbox Code Playgroud)
但是,这是不鼓励的,因为格式不是标准化的,并且可能在不同的编译器(甚至同一编译器的不同版本)之间有所不同.
fch*_*hen 35
如果你只想检查它是否属于某个类,那么
typeid(obj) == typeid(CSubClass)
Run Code Online (Sandbox Code Playgroud)
无论实施如何,它都将始终有效.
否则,一种方便的方法是声明:
virtual const char* classname() { return "CMyClass";}
Run Code Online (Sandbox Code Playgroud)
并实现每个子类.
小智 10
该typeid(obj).name()
事情总是给人变量,因为它被宣布,而不是实际的类型(类)对象的类型.如果将变量obj分配给obj被声明为的类的子类的实例,则不幸的是,typeid不会显示该实例.