Re: opDispatch with string mixin does not work as I would expect.
On Saturday, 10 February 2018 at 07:47:58 UTC, Nicholas Wilson wrote: On Saturday, 10 February 2018 at 06:32:43 UTC, German Diago Alternatively you could do something like auto opDispatch(string name)() if(hasMember!(HeaderData,name){ readHeader(); return mixin("headerData." ~ name); } Do not ask me why but now seems to work with my initial solution. :)
Re: opDispatch with string mixin does not work as I would expect.
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); }
Re: opDispatch with string mixin does not work as I would expect.
On Saturday, 10 February 2018 at 06:32:43 UTC, German Diago wrote: The mixin line does not work. I want to generate the access to the field. How could I achieve that? struct Outer { struct Inner { int a; float b; } Inner i; auto opDispatch(string name)() { return __traits(getMember, i, name); } }
opDispatch with string mixin does not work as I would expect.
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?