在C++中,我有类Base作为接口类和2类的继承:Base1和Base2从Base类是这样的:
class Base{
public:
virtual void printSomething() = 0;
// Some bla bla code...
};
class Base1 : public Base{
public:
Base1();
void printSomething();
};
class Base2 : public Base{
public:
Base2();
void printSomething();
};
Run Code Online (Sandbox Code Playgroud)
以正常方式,在我的main.cpp中,我必须包含以下代码:
Base *b;
string base_name = "Base1"; // or "Base2"
if(base_name.compare("Base1") == 0){
b = new Base1();
}else{
b = new Base2();
}
Run Code Online (Sandbox Code Playgroud)
所以,我想使用 Base *b = base_name()而不是if()else()上面的块.在c ++中,这是可能的,是吗?谢谢!
与Java不同,C++不提供反射概念的原生支持.您可以编写一个简单的函数来构造特定的Base实例.这叫做工厂:
Base* create_base_instance(string name) {
if (name == "Base1")
return new Base1();
if (name == "Base2")
return new Base2();
throw runtime_error("unknown class name");
}
Base *b;
string base_name = "Base1"; // or "Base2"
b = create_base_instance(base_name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |