我有一个设计问题。
我有一个多态结构,带有一个接口 A(抽象的)和一个在类 W 中实现的工作流,它使用接口 A 而不知道派生类。这是在 DLL1 中实现的,我有一个能够返回 A* 的工厂接口 F。在 DLL2 中,我有 A 的具体实现,可以是 A1、A2 等,以及能够创建 A1 和 A2 实例的工厂实现 F1。
我拥有的工厂界面是这样的。
enum ObjectType{typeA1, typeA2};
class F
{
public:
A* create(enum ObjectType) = 0;
}
一些知道 DLL1 和 DLL2 的客户端类会给我具体的对象类型。
但这很难看,因为当我编写 DLL1 时,我必须预先知道具体类的可能类型。这几乎违背了我多态设计的目的。我不想这样做。
我能想到的另一种选择是使用字符串,而不是枚举。但是,我喜欢避免使用字符串,因为它们不是类型安全的并且容易出错。我希望我有机会通过继承来扩展枚举,就像类一样。
我的问题:
有没有更好的出路?在 C++11 中可以扩展枚举吗?(虽然我现在没有)