在类中编写枚举的正确方法是什么?我正在用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_;
};
我的发现(在尝试代码和谷歌搜索后):
答案 0 :(得分:2)
假设您希望在课堂外使用此功能,那么将枚举公之于众。作为enum class
,除了类名之外,您还需要枚举名称来访问值:
class Patterns {
public:
enum class PatternType { ... };
...
};
void makePattern(Patterns::PatternType value) { ... };
makePattern(Patterns::PatternType::bloat);
因为它是一个枚举类,所以将它移到另一个类之外可能是完全有效的。全局命名空间的唯一补充是枚举的名称。
enum class Patterns {
bloat,
...
};
void makePattern(Patterns value) { ... };
makePattern(Patterns::bloat);
如果您有其他操作,您想要使用枚举进行分组,然后将其嵌套在类中,因为您有意义。在这种情况下,您可以决定只使用enum
而不是enum class
:
class Patterns {
public:
enum PatternType { ... };
std::string toString() const { ... };
...
private:
PatternType value;
};
...
...
void makePattern(Patterns::PatternType value) { ... };
makePattern(Patterns::bloat);
答案 1 :(得分:0)
你的方法没问题,唯一的缺点是如果你试图从类外部访问PatternType它将无法访问,因为它被声明为私有。
答案 2 :(得分:0)
我做public
,但你已经按照我的意愿完成了。