How to get address of a nested function?

Steven Schveighoffer schveiguy at gmail.com
Tue Nov 10 14:36:04 UTC 2020


On 11/10/20 5:51 AM, Max Samukha wrote:
> We can get the compile time equivalent of a member function's address by 
> applying '&' to the function in a static context:
> 
> struct S {
>      void foo() {}
> }
> 
> enum pfoo = &S.foo; // ok
> 
> void main() {
>      // now we can use the pointer to create, for example, a delegate
>      S s;
>      void delegate() dg;
>      dg.ptr = &s;
>      dg.funcptr = pfoo;
>      dg();
> }
> 
> However, we can't do that to a nested function:
> 
> void main() {
>      void foo() {
>      }
>      enum pfoo = &foo; // weird kind of an enum delegate; pfoo.funcptr 
> can't be accessed at compile time.
> }
> 
> Is there a way to get a pointer to a non-static nested function?

I don't think you can do it at compile time. You can at runtime by 
accessing the funcptr of the delegate.

-Steve


More information about the Digitalmars-d-learn mailing list