getting member functions of a struct and Error: identifier expected following ., not this

aliak something at something.com
Tue Jan 23 00:00:38 UTC 2018


Hi, I'm trying to get a list of only member functions of a 
struct. I've found that if you do not declare a struct as static 
inside a scope, then there's a hidden "this" member as part of 
the struct. Can someone explain the logic there?

Also am I going about this correctly?

template MemberFunctions(T) {
     import std.traits: isFunction;
     auto MemberFunctions() {
         string[] memberFunctions;
         foreach (member; __traits(allMembers, T)) {

             // NOTE: This static if is here is because of that 
hidden "this" member
             //
             // if I do not do this then I get:
             //   Error: identifier expected following ., not this

             static if (is(typeof(mixin("T." ~ member)) F))
             	if (isFunction!F) {
                     memberFunctions ~= member;
	        }
         }
         return memberFunctions;
     }
}

unittest {
     // works for static and non static.
     /* static */ struct A {
         void opCall() {}
         void g() {}
     }

     /* static */ struct B {
         int m;
         A a;
         alias a this;
         void f() {}
     }

     static assert(MemberFunctions!B == ["f"]);
}

Cheers


More information about the Digitalmars-d-learn mailing list