opDispatch with string mixin does not work as I would expect.
Nicholas Wilson
iamthewilsonator at hotmail.com
Sat Feb 10 07:47:58 UTC 2018
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);
> }
More information about the Digitalmars-d-learn
mailing list