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);
}