在 class 或文件中定义枚举?

Define enum in class or in File?

说在文件 foo.h 我有:

enum bar {
    ONE = 1,
    TWO
};

class foo {
    bar m_bar;
public:
    void setBar(bar arg){ m_bar = arg; }
    bar getBar() const { return m_bar; }
};

在我当前的设计中,唯一持久的 bar 变量将是 m_bar。但我会有其他功能,在 foo 之外包含 bar,例如 GUI class 创建本地 bar 并将其传递给 setBar .

所以这是我的问题,在 foo 内部而不是在 class 内部公开定义 bar 是否有任何理由?

So here's my question, is there any rationale to defining bar inside foo versus just inside the class where it is?

如果create/work with bar 的所有函数都与foo 功能相关,那么完全可以这样写:

class foo
{
    enum bar {
        ONE = 1,
        TWO
    };
};

void process_bar_of_foo(foo::bar bar_value); // process the bar of a foo

另一方面,如果您可以编写(概念上)与 foo 实例无关但处理 bar 值的代码,则您应该单独编写它。

好吧,就目前而言,您可以像您提到的那样使用 foo class 之外的对象和函数创建 bar 对象,然后将其传递给您创建的任何 foo 对象。

但是,如果您要在 class 中定义它,那么除非您先创建一个 foo class,否则您将无法真正创建 bar 对象,这可能会导致不必要的如果您只想枚举对象,则会产生开销。

所以这真的取决于你要做什么。如果您只打算将 bar 与 foo class 一起使用,那么在那里定义它是完全可以接受的。否则,如果要在其他地方访问它,请保持原样。