小编yio*_*own的帖子

C++通用对象工厂按字符串名称

我需要一种基于作为std :: string传递的类名来实例化对象的方法.这项目前正在发挥作用,但需要进行概括:

void* create(std::string name) {
    if(name == "classOne") return new ClassOne();
    else if(name == "classTwo") return new ClassTwo();
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

我没有的东西:

  • 控制要实例化的类:可能是30个派对类.不能对这些类进行任何更改(即基本祖先,多态创建者方法等...)
  • 全班名单列表:以后可以添加更多类,不应该对此工厂进行更改.
  • 要实例化的类周围的包装:由于前两点.

还有别的什么.

最佳用例场景将是:

int main() {
    void *obj = create("classTree"); // create object based on the string name
    /* ... */
    // once we know by context which specific class we are dealing with
    ClassTree *ct = (ClassTree*)obj; // cast to appropiate class
    std::cout << ct->getSomeText() << std::endl; // use object
} …
Run Code Online (Sandbox Code Playgroud)

c++

5
推荐指数
1
解决办法
3158
查看次数

标签 统计

c++ ×1