在 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 一起使用,那么在那里定义它是完全可以接受的。否则,如果要在其他地方访问它,请保持原样。
说在文件 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 一起使用,那么在那里定义它是完全可以接受的。否则,如果要在其他地方访问它,请保持原样。