On Saturday, 10 February 2018 at 06:32:43 UTC, German Diago wrote:
Hello everyone,

I am trying to forward some member functions from a struct as a Catch-all function, so I did something like this:

    struct A {
        struct HeaderData {
          align(1):
          char [21] id;
          ubyte field1;
          ubyte field2;
        }

        Nullable!(HeaderData) headerData;


        auto opDispatch(string name)() {
          readHeader();
static foreach (member; __traits(allMembers, HeaderData)) {
             static if (name == member) {
                 return mixin("headerData." ~ name);
             }
          }
      }

The mixin line does not work. I want to generate the access to the field. How could I achieve that?

That looks like it should work. Perhaps you need to change
`static if (name == member)` to
`static if (name == member.stringof)`

Alternatively you could do something like

auto opDispatch(string name)() if(hasMember!(HeaderData,name){
          readHeader();
          return mixin("headerData." ~ name);
    }

Reply via email to