div*_*ode 6 c++ enums enum-class
在类中编写枚举的正确方法是什么?我正在用 C++ 编写康威的生命游戏代码。所以我有一个模式类,其中包含有关不同类型模式的信息:
class Patterns
{
public:
Patterns();
~Patterns(void);
private:
enum class PatternType
{
bloat,
block,
blinker,
toad
};
PatternType pattern_;
};
Run Code Online (Sandbox Code Playgroud)
我的目标不是污染这里的全球空间。这就是在类内部编写枚举的编写方式,同时牢记 oops 概念。如果没有,请建议一些更好的替代方法以及它们相对于此方法的好处是什么。欢迎任何有关在类中编写枚举时记住事项的意见。
编辑:@Jay Miller 根据他的输入,我尝试了他的所有三种方法
class Patterns
{
public:
Patterns();
~Patterns(void);
private:
enum class PatternType
{
bloat,
block,
blinker,
toad
};
PatternType pattern_;
};
Run Code Online (Sandbox Code Playgroud)
我的发现(在尝试了代码并谷歌搜索了一下之后):
假设您希望在课堂之外使用它,那么将枚举公开是有意义的。作为enum class,除了类名之外,您还需要枚举名称来访问值:
class Patterns {
public:
enum class PatternType { ... };
...
};
void makePattern(Patterns::PatternType value) { ... };
makePattern(Patterns::PatternType::bloat);
Run Code Online (Sandbox Code Playgroud)
因为它是一个枚举类,所以将其移到另一个类之外可能是完全有效的。全局命名空间中唯一添加的内容是枚举的名称。
enum class Patterns {
bloat,
...
};
void makePattern(Patterns value) { ... };
makePattern(Patterns::bloat);
Run Code Online (Sandbox Code Playgroud)
如果您有其他操作想要与枚举分组,那么将其嵌套在类中是有意义的。在这种情况下,您可能决定只使用enum而不是enum class:
class Patterns {
public:
enum PatternType { ... };
std::string toString() const { ... };
...
private:
PatternType value;
};
...
...
void makePattern(Patterns::PatternType value) { ... };
makePattern(Patterns::bloat);
Run Code Online (Sandbox Code Playgroud)