switch to member
    Marc Schütz via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Sat Jan 14 03:32:10 PST 2017
    
    
  
You can utilize a little-known `switch` syntax trick in 
combination with `foreach`. Because a `foreach` over tuples is 
unrolled at compile time, it works even if your fields don't have 
exactly the same types:
--------------------------------------------------------------
struct Foo {
     int x, y;
     long a, b, c;
     short i, j, k;
}
enum Which {
     x, y, a, b, c, i, j, k,
}
void assignValue(ref Foo q, Which member, short e) {
     import std.traits : EnumMembers;
     import std.conv : to;
     final switch(member) {
         // foreach over a tuple is unrolled at compile time
         foreach(w; EnumMembers!Which) {
             case w:
                 // expands to: q.x, q.y, ...
                 mixin("q." ~ w.to!string) = e;
                 break;
         }
     }
}
void main() {
     import std.stdio : writeln;
     Foo q;
     writeln("before: ", q);
     assignValue(q, Which.a, 42);
     assignValue(q, Which.x, 1);
     writeln("after: ", q);
}
    
    
More information about the Digitalmars-d-learn
mailing list