templatized delegate
    Dukc via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Mon May 22 13:38:27 PDT 2017
    
    
  
On Monday, 22 May 2017 at 09:04:15 UTC, Alex wrote:
> 2. Now, I want to store the delegate in another struct. If I 
> want to do this, I have to define the pointer as static. This 
> is not intended at the beginning, but it's ok, as I know, that 
> the delegate would be the same across all instances of B.
The reason it does not work with a non-static member is that A 
generated has no way of knowing where B that contains the 
delegate to be called resides. But it works when done this way:
struct A(alias dg)
{
     auto fun(T...)(T params)
     {
         return dg(params);
     }
}
struct B
{
     A!((B b, int i, string a) => b.dlgptr(i, a)) a;
     void delegate(int, string) dlgptr;
     this(void delegate(int, string) dlg)
     {
         dlgptr = dlg;
     }
     void fun(int i, string s)
     {
         a.fun(this, i, s);
     }
}
void main()
{
     auto dlg(int i, string s)
     {
         import std.stdio;
         writeln(i, " ", s);
     }
     auto b = B(&dlg);
     b.fun(5, "a");
}
I wasn't in mood to look at C though, so I don't know if this 
helps.
    
    
More information about the Digitalmars-d-learn
mailing list