假设我们有一个基础结构元素接口(interface):
class BaseFabricElenent {
public:
BaseFabricElenent(){}
virtual ~BaseFabricElenent(){}
virtual void action(){}
};
我们有一个枚举:
enum TypeCode {
TypeCodeLive = 10,
TypeCodeDie = 100
};
我们有 TypeCodes 的实现。
我们希望获得一种结构,它可以通过 TypeCode
返回所需的 type
作为 BaseFabricElenent*
,就像普通结构一样。
如何通过预处理器定义向 fabric 添加类型?
说:
class LiveFabricElenent: pulic BaseFabricElenent {
public:
LiveFabricElenent() :
BaseFabricElenent(){}
virtual ~LiveFabricElenent(){}
virtual void action(){}
};
ADD_TO_FABRIC(LiveFabricElenent);
更新:
发现这很有帮助 article on registration of types into factory on global initialization phase .剩下的就是创建一个 Define 来为类型 registring 生成 stub 类。
最佳答案
我认为您不需要宏来实现您的目的。如果您必须使用 enum
,请执行以下操作:
class Fabric {
public:
BaseFabricElement* createElement(TypeCode typeCode) {
switch (typeCode) {
case TypeCodeLive: return new LiveFabricElement();
case TypeCodeDead: return new DeadFabricElement();
// ... other cases ...
default: return NULL;
}
}
};
如果创建过程不依赖于Fabric
状态,那么createElement
方法可以是static
。我还会考虑返回一个智能指针而不是原始指针,并将 Fabric
重命名为 Factory
。
关于c++ - 如何通过预处理器定义使类可用于结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18466816/