need help to get member function const address

Calvin P changlon at gmail.com
Thu Mar 19 13:40:46 UTC 2020


On Monday, 16 March 2020 at 18:43:47 UTC, Steven Schveighoffer 
wrote:
>
> 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

Thanks for the tips, Steve.

I need to put them into a big const struct to use on runtime,  so 
they can not be modify on runtime by mistake.

I can not put the address into enum,  because  Error: need this 
to access d

add cast(void*) still get same error:

enum callee_ptr = cast(void*) &(__traits(getMember, A, "d")); //  
Error: need this to access d

but I come up with a workaround:

static void* getCallee() pure @nogc nothrow {
		enum callee_ptr = &(__traits(getMember, App, name));
		return callee_ptr;
}

__gshared const AppHelper  APP_HELPER = {&getCallee,  ..};








More information about the Digitalmars-d-learn mailing list