On Wednesday, 27 December 2017 at 21:39:49 UTC, Mengu wrote:
On Wednesday, 27 December 2017 at 20:54:17 UTC, bitwise wrote:
[...]
there's also a simple workaround for fields with the same type:
https://run.dlang.io/is/dsFajq
import std.stdio;
struct S {
int x;
int y;
}
auto setValue(ref S s, string field, int value) {
foreach (fieldName; __traits(allMembers, S)) {
if (fieldName == field) {
__traits(getMember, s, fieldName) = value;
break;
}
}
}
void main() {
S s;
s.setValue("x", 5);
s.setValue("y", 25);
writeln(s);
}
you can play with it to make it more generic. you can also
create a mixin template that would generate setters for each
field you would need a setter for and then in the run time
you'd just be able to call them.
return type should just be void. that's just my muscle memory. :-D