在课程或文件中定义枚举?

时间:2015-12-14 13:53:49

标签: c++ class enums definition scoping

在文件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的其他函数,例如创建本地bar并将其传递给setBar的GUI类。

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

2 个答案:

答案 0 :(得分:2)

  

所以这是我的问题,是否有理由在foo中定义bar而不仅仅是在类里面?

如果创建/使用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实例无关但处理条形值,则应该单独编写。

答案 1 :(得分:0)

嗯,就目前而言,你可以像你提到的那样用foo类之外的对象和函数创建bar对象,然后将它传递给你做的任何foo对象。

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

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