我有一个设计问题。扩展枚举
我有一个接口A(抽象的)多态结构和类W实现的工作流使用接口A而不知道派生类。这是在DLL1中实现的,并且我有一个能够返回A *的工厂接口F. 在DLL2中,我有A的具体实现,可以是A1,A2等,也可以是工厂实现的F1,可以创建A1和A2实例。
我拥有的工厂界面就是这样的。
enum ObjectType{typeA1, typeA2};
class F
{
public:
A* create(enum ObjectType) = 0;
}
某些知道DLL1和DLL2的客户端类将为我提供具体的对象类型。
但是这很丑陋,因为当我编写我的DLL1时,我将不得不先知道具体类的可能类型。这几乎打破了我多形设计的目的。我不想这样做。
我能想到的另一种选择是使用字符串,而不是枚举。但是,我喜欢避免字符串,因为它们不是类型安全的,并且容易出错。我希望我有机会通过继承扩展枚举,就像类一样。
我的问题:
有没有更好的出路? 在C++ 11中是否可以扩展枚举? (但我现在没有它)
enum或字符串的替代方法是[UUID](http://en.wikipedia.org/wiki/Uuid)。 – 2012-07-05 16:17:48
在C++中,枚举不能被继承。在大多数允许这样做的语言中,继承与大多数人的想法相反。它不*扩展*枚举,它*合同*他们。奇怪而真实,而且有很好的理由。所以你的想法不可能奏效。 – 2012-07-05 18:00:37