作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有这个枚举:
enum ButtonState {
BUTTON_NORMAL = 0,
BUTTON_PRESSED = 1,
BUTTON_CLICKED = 2
};
const u8 NUM_BUTTON_STATES = 3;
在我的 Button 类中,我有成员变量 ButtonState state;
和 ButtonColors colors[NUM_BUTTON_STATES];
。绘制按钮时,我使用 colors[state]
来获取按钮所处状态的颜色。
我的问题:
最佳答案
这是好的编程风格吗?
我想是的。我经常做同样的事情。
有更好的方法吗?
class Button
{
public:
// Used for array indexes! Don't change the numbers!
enum State {
NORMAL = 0,
PRESSED,
CLICKED,
NUMBER_OF_BUTTON_STATES
};
};
缺点是 NUMBER_OF_BUTTON_STATES 现在是一个有效的 Button::State 值。如果您将这些值作为 ints 传递,这不是什么大问题。但是如果你真的期待一个Button::State,那就麻烦了。
使用枚举作为数组索引感觉不对。
没关系。只需DOCUMENT它,让下一个人知道发生了什么! (这就是评论的用途。)
我必须指定枚举的值吗?
如果没有 '=' 赋值,枚举的应该从零开始并向上递增。
如果枚举条目具有“=”赋值,则后续非“=”枚举条目从那里继续计数。
来源:注释 C++ 引用手册,第 113 页
也就是说,我喜欢指定初始值只是为了让代码更清晰。
关于c++ - 使用枚举作为数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/404231/
我是一名优秀的程序员,十分优秀!