CT filtering of class members

Sjoerd Nijboer dlang at sjoerdnijboer.com
Sun Aug 11 15:27:54 UTC 2019

The following snippet doesn't compile

I am trying to reflect on a class and only do an operation with 
all member functions of a class.
But I can't seem to use a filter to only get the member functions 
out of a type T.

I understand that there are two errors in my snippet.
1) It cannot mixin a `name` because it is a variable from the 
lambda that `filter()` is using.
2) members.filter!(name => !ctorAndDtor.canFind(name)) does not 
filter on symbols defined in ctorAndDtor

How can I fix these problems and return all member functions 
whitout ctor and dtor of a type T?

Code snippet:

void main()

void GetFunctionMembers(T)()
     enum members = [__traits(derivedMembers, T)];
     pragma(msg, "Functions: " ~ members.stringof);

     enum ctorAndDtor = ["this", "__ctor", "__dtor"];
     enum memberFunctions = members.filter!(name => 
                 && mixin("isFunction!(T." ~ name ~ ")"))();

     pragma(msg, memberFunctions);

class Foo
     bool myBool;
     int k;



     void bar(int k)
         this.k = k;

     void qux()

More information about the Digitalmars-d-learn mailing list