c++ - 在 C++ 中 : Is it possible to have a named enum be continued in a different file?

标签 c++ enums continue

例如:

基类头文件有:

enum FOO
{
FOO_A,
FOO_B,
FOO_C,
FOO_USERSTART
};

那么派生类有:

enum FOO
{
FOO_USERA=FOO_USERSTART
FOO_USERB,
FOO_USERC
};

为了清楚地说明我的用法,它是为了拥有一个事件处理程序,其中基类有事件,然后派生类可以添加事件。派生类事件处理程序将检查它的事件,如果该事件不适合它,那么它将将该事件传递给基类。

class Base
{
public:
    virtual void HandleFoo(FOO event);
};

class Derived: public Base
{
public:
    void HandleFoo(FOO event);
};


void Base::HandleFoo(FOO event)
{
     switch(event)
     {
     case FOO_A:
       /* do stuff */
     break;
     case FOO_B:
       /* do stuff */
     break;
     case FOO_B:
       /* do stuff */
     break;
     }
 }

void Derived::HandleFoo(FOO event)
{
     switch(event)
     {
     case FOO_USERA:
       /* do stuff */
     break;
     case FOO_USERB:
       /* do stuff */
     break;
     case FOO_USERB:
       /* do stuff */
     break;
     default:
          /* not my event, must be for someone else */
          Base::HandleFoo(event);
     break;
     }
 }

最佳答案

没有。一旦编译器看到 },就需要能够决定枚举是否适合 char、short、int 或 long。

所以如果基类头有

enum Foo {
  A,
  B,
  MAX = 1<<15
};

编译器可能会决定枚举适合 16 位。然后它可以使用它,例如布置基类时。如果您稍后能够将 1<<31 添加到枚举,则基类枚举成员将无法保存枚举值之一。

关于c++ - 在 C++ 中 : Is it possible to have a named enum be continued in a different file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/267367/

相关文章:

c++ - 如何使用 ffmpeg 解码 AAC 网络音频流

typescript - TS2536 : Type cannot be used to index type ENUM - TS MAPPED TYPES

c++ - for 循环和 if 条件中的 continue 语句

java - 为什么在我可以修改 if(条件)时使用 "continue;"语句

c++ - 在 C/C++ 中检测有符号溢出

c++ - 是否有一个表达式使用模来进行反向环绕 ("reverse overflow")?

string - 奇怪的 typescript 字符串枚举无法从字符串解析

C# Foreach 循环 - 继续问题

c++ - vector 如何在减小其大小后不破坏元素两次?

java - 在 Java 中使用共享接口(interface)迭代枚举(类对象)