在C++中實現反射機制通常需要使用一些額外的工具和技術。以下是一種可能的實現方式:
#define REFLECT(className) \
static const char* className##__className = #className; \
static const int className##__numMembers = 2; \
static const char* className##__memberNames[] = { "member1", "member2" };
template <typename T>
class Reflection {
public:
static const char* className;
static const int numMembers;
static const char* memberNames[];
};
template <typename T>
const char* Reflection<T>::className = nullptr;
template <typename T>
const int Reflection<T>::numMembers = 0;
template <typename T>
const char* Reflection<T>::memberNames[] = {};
typeid
關鍵字來獲取類型的名稱。class Base {
public:
virtual void foo() {}
};
class Derived : public Base {
};
int main() {
Base* obj = new Derived();
const std::type_info& type = typeid(*obj);
std::cout << type.name() << std::endl;
delete obj;
return 0;
}
通過以上方法可以實現一定程度上的反射機制,但是在C++中實現完整的反射機制仍然比較困難,因為C++是一種靜態類型語言,不像動態語言那樣可以在運行時動態創建和處理類型。