我正在做一个个人项目,我需要一个动态工厂。目前我有以下“系统”:
class Action { ...} // Which is abstract
class A : public Action { ... }
class B : public Action { ... }
class C : public Action { ... }
...
std::map<std::string, Action *> _actions;
_action.insert( { "A", new A() } );
_action.insert( { "B", new B() } );
_action.insert( { "C", new C() } );
Action * act = _actions.find("B")->second; // Get action's pointer
Run Code Online (Sandbox Code Playgroud)
但是我对这个解决方案并不满意,因为即使我从不使用这些操作,它们也会在启动时实例化并在应用程序的所有生命周期中都保留在内存中,如果我想要一个“干净”的对象,我需要动态转换我的对象以确定它的类型以通过复制调用构造函数......我不是这个解决方案的真正粉丝,因为我必须“硬编码”所有情况......
我不知道我想象的解决方案是否真的可行,但这是我的想法:
我保留了以前的类层次结构,即:
class Action { ...} // Which is abstract
class …Run Code Online (Sandbox Code Playgroud)