c++ - 关于在 C++ 中扩展枚举

标签 c++ enums

假设我有一个基类,它有一个返回其实例状态的方法:

enum STATE {ALIVE, DEAD}

class BASE{
    virtual STATE doThingsAndReturnStatus() {...};
}

现在我有了我的派生类,它可能有额外的状态,例如半死不活。在我看来,很难使接口(interface)保持一致,除非我需要为每个派生类全局添加一个 STATE。 (即,将新项目添加到 class BASE 中的 STATE 定义中)。我的问题是如何在不触及基类或包含它的文件的情况下实现派生类的这种类型的扩展。)

没有必要只限制对“枚举”的讨论。

我在这里找到了一个相关的线程。但它不符合我的需求:

Extending enums in C++?

最佳答案

您可以将 enum 替换为 intstringfloat 或类似的东西。

但是,这也可能不是一个好主意。假设我们可以扩展 enum [在具有此功能的 C++ 的虚构版本中],因为 getMyStatus 是一个虚函数,它被设计为从通用代码调用不知道派生类的细节。所以如果你写这样的东西:

for(iter : baseClassContainter)
{
    status = iter->getMyStatus();
    switch(status)
    {
       case DEAD: 
            ... do some stuff here. 
            break;

       case ALIVE:
            ..... do some stuff here ... 

    }
}

这段代码应该如何处理“HALFDEAD”?它甚至不知道这样一个值的存在,因为[在我们支持这个的想象语言中]它只存在于派生类中......

关于c++ - 关于在 C++ 中扩展枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17156426/

相关文章:

c++ - 如何获取变量的类型?

c++ - 如何将多个元素插入到具有相同值的 std::map

java - 返回枚举值而不调用 get 函数

java - 用于存储 RGB 字符串的枚举

java - 如何使用关键字作为枚举常量

c++ - 将CBitmap转换为HICON并在状态栏上使用它

C++ - 在 std::map 中查找相邻元素

objective-c - 从 Objective-C 使用 Swift 类和枚举

c++ - udp 服务器向特定客户端发送数据,直到收到任何 recvfrom

c# - 'Enum : Type' 和简单的 'Enum' 有什么区别