c++ - 如何通过预处理器定义使类可用于结构?

标签 c++

假设我们有一个基础结构元素接口(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/

相关文章:

c++ - 您的计算机错误中缺少 DLL

c++ - 用于多线程应用程序的 GCOV

c++ - OpenCL 内核访问 CL_MEM_READ_WRITE,缓冲区

c++ - 使用 QSerialPort 发送数据时遇到问题

c++ - 如何调用指向成员函数的指针?

c++ - 将行复制到矩阵导致 OpenCV 崩溃 - Visual Studio 2010 C++

c++ - 在 C++ 中连接 C 字符串的更优雅的方法?

C++ : Add a method to a base class interface

c++ - 实例未在主函数中声明

c++ - 附加深度纹理 (C++) 时 OpenGL FBO 纹理困惑