c++根据类名字符串创建类 使用反射机制
时间: 2023-12-24 08:02:28 浏览: 93
Qt 反射机制实现,通过类名创建对象
5星 · 资源好评率100%
在C++中没有像Java和C#等语言那样的反射机制,因此无法直接根据类名字符串创建类。不过可以通过一些技巧实现类似的功能。
一种常见的方法是使用工厂模式。首先定义一个基类或接口,所有需要创建的类都实现该基类或接口。然后创建一个工厂类,该工厂类有一个静态方法,接收一个字符串作为参数,根据这个字符串来决定创建哪个对象。在这个静态方法中,使用if/else或switch/case等语句来判断要创建哪个对象,最后返回创建的对象。使用时,通过工厂类来创建对象即可。
下面是一个简单的示例代码:
```cpp
class Base {
public:
virtual void func() = 0;
};
class Derived1 : public Base {
public:
virtual void func() { std::cout << "Derived1" << std::endl; }
};
class Derived2 : public Base {
public:
virtual void func() { std::cout << "Derived2" << std::endl; }
};
class Factory {
public:
static Base* create(const std::string& name) {
if (name == "Derived1") {
return new Derived1();
}
else if (name == "Derived2") {
return new Derived2();
}
else {
return nullptr;
}
}
};
int main() {
Base* obj1 = Factory::create("Derived1");
obj1->func(); // 输出 Derived1
Base* obj2 = Factory::create("Derived2");
obj2->func(); // 输出 Derived2
return 0;
}
```
在上面的示例代码中,我们创建了一个基类Base,以及两个派生类Derived1和Derived2,它们都实现了Base类的纯虚函数func。然后创建了一个工厂类Factory,其中的静态方法create接收一个字符串作为参数,根据这个字符串来创建对象。在main函数中,我们通过工厂类来创建对象,并调用其func方法。
阅读全文