On Wednesday, 27 December 2017 at 20:04:29 UTC, Marc wrote:
I'd like to set the members of a class by its name at runtime,
I would do something like this:
__traits(getMember, myClass, name) = value;
but since name is only know at runtime, I can't use __traits().
What's a workaround for this?
You will have to use a combination of compile time and runtime
methologies.
Essentially what you want is this:
void setMemberValue(string name, int value)
{
switch(name)
{
case "member1":
member1 = value;
break;
case "member2":
member2 = value;
break:
...
}
}
As you don't want to write this for all members by hand you
should write a function which generates the source code for this
switch using static foreach and __traits(allMembers) and then
mixin the generated string into the setMemberValue method. If
your members can have different types you will also need runtime
type that can hold multiple types. For simplicity I just used
"int" in the above example. You could use "std.variant" for this.