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

Reply via email to