Aja*_*jai 4 c++ enums coding-style
在命名空间级别直接使用c ++中的枚举是不好的做法?我的意思是没有与任何课程相关联?假设我有一个enum和一个看起来像这样的类,
enum Player { USER, COMPUTER}
class Game {
//Logic of the game.
};
Run Code Online (Sandbox Code Playgroud)
那么我应该宣布玩家枚举为游戏类的成员吗?它应该是私人的吗?
Mar*_*all 11
这个答案最初写于2011年.现在C++ 11支持广泛可用,首选方法是使用enum class,正如Matthew D. Scholefield指出的那样:
enum class Player {
User,
Computer
};
Run Code Online (Sandbox Code Playgroud)
枚举常量必须在引用时使用枚举的名称进行限定(例如,Player::Computer).
不,enum公开没有任何内在错误.但请记住,枚举常量不能使用封闭枚举类型的名称进行限定.也就是说,你不能写Player::USER或类似的引用USER常量; 它们直接出现在封闭的命名空间中.因此,为常量设置前缀可能是个好主意,这样就不会发生名称冲突.
例如,请考虑以下声明:
enum Player {
PL_USER,
PL_COMPUTER
}
Run Code Online (Sandbox Code Playgroud)
这更安全,因为名称冲突不太可能带有"PL_"前缀.此外,它通过暗示给定常量属于哪个枚举来提高代码可读性.
像C#和Java这样的语言对枚举采用了略微不同的方法,其中必须同时指定枚举的名称和常量的名称,例如Player.USER.通过在自己的命名空间中嵌入枚举声明,可以在C++中实现类似的效果.例如:
namespace Player {
enum Type {
USER,
COMPUTER
}
}
Run Code Online (Sandbox Code Playgroud)
这具有嵌入PLAYER和COMPUTER在Player命名空间中而不是全局(或以其他方式封闭)命名空间的效果.在我看来,这是否是一种好的方法,是一个偏好的问题.