在C++中,要在运行时获取对象的名称,可以使用反射机制。C++标准库中没有直接提供反射机制,但可以通过一些方法实现。
一种常用的方法是使用宏定义和模板来实现类名和对象名的记录。例如:
#include<iostream>
#include<string>
#define REGISTER_CLASS(classname) \
static const char* g_classname##_name = #classname;
class Base {
public:
virtual ~Base() {}
const char* GetClassName() const {
return g_classname_name;
}
};
class Derived : public Base {
public:
REGISTER_CLASS(Derived)
};
int main() {
Derived d;
std::cout << "Object name: " << d.GetClassName()<< std::endl;
return 0;
}
在上面的代码中,我们使用了宏定义 REGISTER_CLASS
来记录每个类的名称。在每个类的实现中,我们使用该宏来注册类名。在 Base
类中,我们提供了一个 GetClassName
方法来获取类名。
需要注意的是,这种方法只能获取类名,而不能获取对象名。如果需要获取对象名,可以考虑使用第三方库,例如 Boost.TypeIndex。
领取专属 10元无门槛券
手把手带您无忧上云