Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在类或文件中定义枚举?_C++_Class_Enums_Definition_Scoping - Fatal编程技术网

C++ 在类或文件中定义枚举?

C++ 在类或文件中定义枚举?,c++,class,enums,definition,scoping,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变量将是mubar。但是除了包含bar的foo之外,我还有其他函数,例如一个GUI类,它创建一个本地bar并将其传递给se

假设在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
变量将是
mubar
。但是除了包含
bar
foo
之外,我还有其他函数,例如一个GUI类,它创建一个本地
bar
并将其传递给
setBar

所以我的问题是,在
foo
内部公开定义
bar
与在类内部公开定义
foo
相比,有什么理由吗

所以我的问题是,在foo内部定义bar与在类内部定义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实例无关但处理bar值的代码,那么您可能应该单独编写。

目前,您可以使用您提到的foo类之外的对象和函数创建bar对象,然后将其传递给您创建的任何foo对象

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


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

如果枚举非常特定于一个概念或单个概念,则建议将该枚举放在封闭的命名空间中class@BeyelerStudios因此,您是说将foo.h封装在一个名称空间中,该名称空间封装了
enum
,但将
enum
保留在
之外?您可以应用相同的名称空间类的注意事项
foo
-如果这符合您的设计-如果您喜欢对类使用通用命名法(即
Sample
),可能它们的名称空间也很合适…因此,如果像在示例中一样,我将只在本地定义一个
bar
,以便将值从GUI读入
foo
,然后我应该在
foo
内部定义
bar
?是的,我想是这样的(至少我在自己的项目中是这样做的)。我的意思是在内部定义,但公开定义。我来澄清这个问题。