On Monday, 20 January 2025 at 19:03:09 UTC, DLearner wrote:
// In the code below, what fn needs to go in the commented-out
line,
// to make the program print 7, 11 rather than 7, 7?
You can't I don't think get a list of local variables at this
point, but you can get a list of struct member names.
This is the best I could do:
```d
T* fn(T, Struct)(ref Struct s, string name) {
import std.traits;
switch(name)
{
static foreach(n; FieldNameTuple!Struct) {
case n:
static if(is(T == typeof(__traits(getMember, s, n))))
return &__traits(getMember, s, n);
else assert(0, "field " ~ n ~ " is not of type "
~ T.stringof);
}
default:
assert(0, "field " ~ name ~ " does not exist on type " ~
Struct.stringof);
}
}
void main()
{
static struct S {
int IntVar1 = 5;
int IntVar2 = 7;
int IntVar3 = 11;
}
S s;
auto name = "IntVar3";
auto ptr = s.fn!int(name);
import std.stdio;
writeln(*ptr);
}
```
-Steve