On 3/14/20 5:06 AM, Calvin P wrote:
I use this code to get member function address on runtime:

=========
struct A {
        this(){};
}
auto ctor = (&__traits(getMember, A.init,"__ctor")).funcptr;
=========


my question is, how to get it in compile time like static function address:

=========
struct A {
      void d(){};
      static void fn(){};

Note: no semicolons needed here

}

enum FN = &A.fn;  // static method address is ok
enum A0 = &(A.d).funcptr; // Error: need this for d of type void()

enum A0 = &A.d;

Note that you can't call it at all, but you can get the function pointer, and put it into a delegate later by assigning .funcptr.

void main()
{
    A a;
    void delegate() dg;
    dg.ptr = &a;
    dg.funcptr = A0;
    dg(); // calls a.d()
}

-Steve

Reply via email to