类中的枚举

时间:2014-09-11 11:17:08

标签: c++

假设我有一个C类,它具有一个属性状态,可以取值,平坦或向上。不是将状态变量表示为整数,而是使用枚举(其中ofc基本上是整数)。例如,

class C{
public:
    enum state {down = -1, flat = 0, up = 1};
    C(state s = flat) : st(s) {}
private:
    state st;
};

将枚举放在类的公共部分中的原因是其他对象也可以使用此枚举列表。他们必须打电话

C::up

检索值。我的问题是:a"最佳实践"要么将枚举声明放在类定义内,还是放在类定义之外(例如直接放在它上面)? 如果枚举表示只对该类有意义的值/状态,那么将它放在类定义中会感觉很直接。

谢谢。

3 个答案:

答案 0 :(得分:1)

你很可能不想要自由浮动的枚举 - 它们应该在一个类或命名空间中。如果枚举只在该特定类中有意义,那么将它放在内部可能是最好的做法 - 我相信SFML有一个带有它的事件的例子(sf :: Event有一个类型为sf :: Event :: EventType的成员,它可以取值,如sf :: Event :: KeyPressed等。)。

答案 1 :(得分:0)

如果您使用C ++ 11,则可以使用强类型枚举。它们的形式如下:

enum class state
//     ^
{
    Down, Flat, Up
};

您现在可以使用以下方式访问这些:

state::Down
state::Flat
state::Up

请注意,这要求您限定/ using元素,这总是很好的做法。但是,并不是这些枚举类型安全所以不能任意使用整数(你可能不应该这样做)。

答案 2 :(得分:0)

如果一个语义上的枚举只在一个类的上下文中有意义,那么将它保持在内部是完全自然的。如果它具有全局意义,它应该在课外。在任何情况下,枚举的位置都应该反映正在开发的系统的语义。

因此,我完全同意你的最后一句话。