How do I set a class member value by its name in a string?

Mengu mengukagan at gmail.com
Wed Dec 27 21:42:53 UTC 2017


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


More information about the Digitalmars-d-learn mailing list