【发布时间】:2014-11-20 16:03:17
【问题描述】:
在类中编写枚举的正确方法是什么?我正在用 C++ 编写康威的生命游戏代码。所以我有一个模式类,其中包含有关不同类型模式的信息:
class Patterns
{
public:
Patterns();
~Patterns(void);
private:
enum class PatternType
{
bloat,
block,
blinker,
toad
};
PatternType pattern_;
};
我的目标是不污染这里的全球空间。因此,它是在类中编写枚举的编写方式,同时牢记 oops 概念。如果没有,请提出一些更好的替代方案,以及它们比这种方法有什么好处。欢迎任何关于在类内编写枚举时记住事情的意见。
编辑:@Jay Miller 根据他的意见,我已经尝试了他的所有三种方法
enum class PatternClassOut{ point, circle, triangle };
class Patterns
{
public:
enum PatternSimple{bloat, block, blinker, toad};
enum class PatternClassIn{cat, mouse, dog};
//get set functions for all the enum variables
private:
PatternClassOut out_;
PatternSimple simple_;
PatternClassIn in_;
};
我的发现(在尝试了代码和谷歌搜索之后):
- PatternSimple 是在我的案例中编写枚举的最简单方法,在类内部;但它会影响类型安全,即我可以将枚举值与任何其他数据类型进行比较,并且不会给出任何错误。
- PatternClassIn 提供类型安全;但我必须在调用函数中编写更多代码才能访问枚举值。
- PatternClassOut 提供了两全其美的效果。它提供了类型安全,此外,调用函数访问枚举值的代码与 PatternSimple 的代码相同。
【问题讨论】:
-
如果枚举是类的公共接口的一部分,那么每次都强制调用者在其前面加上
Patterns::前缀可能会变得很麻烦。但如果它真的像您的示例代码所示是私有的,那很好。
标签: c++ enums enum-class