On Friday, 1 January 2021 at 23:14:43 UTC, Rekel wrote:
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.

D's switch statement only works on strings and integers. For more complex values, the easiest thing is to just use an if-else chain.

If you really want to use a switch statement, you can do it by defining a function that maps each of your enum values to a unique integer; for example:

enum Wind { ... }

size_t index(Wind w)
{
    if (w = Wind.N) return 0;
    // etc.
}

void someFunction(Wind w)
{
    switch(w.index) {
        case Wind.N.index: // uses CTFE
            // ...
            break;
        // etc.
        default: assert(0);
    }
}

Reply via email to