Tuple enumeration without integers or strings

frame frame86 at live.com
Sun Jan 3 02:17:43 UTC 2021


On Sunday, 3 January 2021 at 01:15:56 UTC, Paul wrote:
> On Saturday, 2 January 2021 at 21:48:04 UTC, Paul Backus wrote:
>> Yes, but this will be true of any approach you choose. If two 
>> enum members have exactly the same value, there is no way to 
>> distinguish between them, either at compile time or at runtime.
>
> Oh I see, thanks!
> A bit of a bummer as I guess that means you're pretty much 
> required to use an additional seperate structure like an array 
> or map/associative array, the latter making the use of an enum 
> instead of string names slightly pointless in this scenario, 
> thank you nontheless 😅.

Besides the problem with equal values, what's wrong with that:

alias Thing = Tuple!(int, int);
enum Wind {
     A = Thing(0, 1),
     B = Thing(0, 2),
     C = Thing(0, 2)
}

void some_function(Wind w) {
     switch (w.hashOf) {
     case Wind.B.hashOf:
         break;

     default:
         assert(0);
     }
}

void main() {
     some_function(Wind.B);
     writefln("%d%d", Wind.C.expand);
}


More information about the Digitalmars-d-learn mailing list