Assigning a method name to a variable and then calling it with an object

Basile B. b2.temp at gmx.com
Thu May 24 23:08:29 UTC 2018


On Thursday, 24 May 2018 at 23:03:21 UTC, aliak wrote:
> Hi,
>
> I was essentially trying to do this:
>
> struct S {
>   void f() {}
> }
>
> auto f = S.f; // f becomes void function(S) ??
> S s;
> f(s);
>
> Is something like that possible?
>
> Cheers,
> - Ali

Sure:

```
import std.stdio;

void main(string[] args)
{

     struct S {
       void f() {"yeah possible".writeln;}
     }

     void delegate() f;
     f.funcptr = &S.f;
     S s;
     f.ptr = &s;
     s.f();
}
```

It's just that you have to learn the ABI of D delegates.
There are two members: .funcptr (function) and .ptr (context, i.e 
the "this").


More information about the Digitalmars-d-learn mailing list