I have this enum:
enum ButtonState { BUTTON_NORMAL = 0, BUTTON_PRESSED = 1, BUTTON_CLICKED = 2 }; const u8 NUM_BUTTON_STATES = 3;
In my Button class I have member variables ButtonState state; and ButtonColors colors[NUM_BUTTON_STATES];. When drawing the button, I use colors[state] to get the colours for whatever state the button is in.
My questions:
- Is this good programming style? Is there a better way to do it? (I usually only use enums with switch statements… using an enum as an array index doesn’t feel right.)
- Do I have to specify the values of the enum? It seems to start from 0 by default and increment by 1 but is it guaranteed to work that way in all compilers?
Is this good programming style?
I think so. I do the same thing quite frequently.
Is there a better way to do it?
Drawback is that NUMBER_OF_BUTTON_STATES is now a valid Button::State value. Not a big issue if you are passing these values around as ints. But trouble if you are actually expecting a Button::State.
Using an enum as an array index doesn’t feel right.
It’s fine. Just DOCUMENT it, so the next guy knows what’s going on! (That’s what comments are for.)
Do I have to specify the values of the enum?
With no ‘=’ assignment, enum’s are supposed to start at zero and increment upwards.
If a enum entry has an ‘=’ assigned value, subsequent non ‘=’ enum entries continue counting from there.
Source: The Annotated C++ Reference Manual, pg 113
That said, I like to specify the initial value just to make the code that much clearer.