1

假设我们有一个基础结构元素接口:

class BaseFabricElenent {
public:
    BaseFabricElenent(){}
    virtual ~BaseFabricElenent(){}
    virtual void action(){}
};

我们有一个枚举:

enum TypeCode { 
    TypeCodeLive = 10,
    TypeCodeDie = 100
};

我们有我们的 TypeCode 的实现。

我们希望得到一种能像普通织物一样返回所需的织物typeTypeCodeBaseFabricElenent*

如何通过预处理器定义向结构添加类型?

说:

class LiveFabricElenent: pulic BaseFabricElenent {
public:
       LiveFabricElenent() :
          BaseFabricElenent(){}
        virtual ~LiveFabricElenent(){}
        virtual void action(){}
};
ADD_TO_FABRIC(LiveFabricElenent);

更新:

找到这篇关于在全局初始化阶段将类型注册到工厂的有用文章 。剩下的就是创建一个将为类型注册生成存根类的定义。

4

1 回答 1

0

我认为您不需要宏来实现您的目的。如果您必须使用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. 我还会考虑返回一个智能指针而不是原始指针,然后重命名FabricFactory.

于 2013-08-27T16:13:11.487 回答