c++ 实现反射并增加方法
时间: 2023-08-02 22:05:06 浏览: 134
C++ 是一种静态语言,没有像动态语言那样内置反射机制。不过,我们可以手动实现一个简单的反射机制。
具体实现步骤如下:
1. 定义一个基类,包含一个纯虚函数用于获取类名:
```c++
class Reflectable {
public:
virtual const char* getClassName() const = 0;
};
```
2. 在每个需要反射的类中继承该基类,并实现 getClassName 函数:
```c++
class MyClass : public Reflectable {
public:
const char* getClassName() const override {
return "MyClass";
}
void myMethod() {
// ...
}
};
```
3. 实现一个工厂类,用于根据类名创建对象:
```c++
class ReflectFactory {
public:
static Reflectable* create(const char* className) {
if (strcmp(className, "MyClass") == 0) {
return new MyClass();
}
return nullptr;
}
};
```
4. 使用工厂类创建对象:
```c++
Reflectable* obj = ReflectFactory::create("MyClass");
if (obj != nullptr) {
MyClass* myObj = dynamic_cast<MyClass*>(obj);
if (myObj != nullptr) {
myObj->myMethod();
}
delete obj;
}
```
通过这种方式,我们实现了一个简单的反射机制,并且可以在 MyClass 中增加新的方法,只需要确保该类继承了 Reflectable,并实现了 getClassName 函数即可。
阅读全文