I seem to have hit a bit of a wall when comparing D enums to Java enums. Of course the latter is just a fancy class, though it'd be nice to see partially equivalent usefulness regardless.

For example, as soon as non-integer, non-string values are given to enums things get messy for me when using switch cases, I haven't yet found a satisfying way of doing this. Note the reason I'm using tuples is to somehow replicate the way java enumerals can contain several member variables, which tends to be very useful.

Something along the lines of the following is what i'd like to achieve;
alias Direction = Tuple!(byte, "x", byte, "y");
enum Wind {N = Direction(0, 1) ... etc}
...
void some_function(Wind w) {
    switch (w) {
        case Wind.N:
            ... etc
            break;
        ... etc
        default:
            assert(0);
    }
}

One thing that might have worked would have been an equivalent of java's "ordinal", though from what I've found D doesn't seem to have something equivalent to this? (I'd prefer not to have a seperate tuple member purely for ordinality, and dropping enumerals altogether also seems like a waste)

Reply via email to