有没有办法像我的代码一样调用C++中的多态性反射?

Kin*_*uoc 2 c++ polymorphism

在C++中,我有类Base作为接口类和2类的继承:Base1Base2Base类是这样的:

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 ++中,这是可能的,是吗?谢谢!

vz0*_*vz0 6

与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)