workaround for closure problem needed
    BCS 
    ao at pathlink.com
       
    Wed Dec 26 17:57:04 PST 2007
    
    
  
Reply to Mandel,
> Hi,
> 
> I have a problem with closures and D 1.024.
> D2 does have full closure support, but I have to stick with D1
> for now.
> Problem: variable "state" changes silently when the anonymous
> function goes out of the scope of function filter.
> Therefore the program does print out "item" only once.
> My question is if there is a workaround ("static state" wouldn't be
> thread safe)?
> 
wrap the stuff (state + the local function) in a local struct, new off an 
instance at the top of the outer function, convert the outer function's access 
to "state" into "inst.state" and then replace the anon delegate with "&inst.fn". 
Crude and a bit ugly but it works.
OTOH (WARNING: TOTAL HACK) if you want to go one step cheaper; state is 32bits, 
the same as a void*.
struct Wrap
{
  bool func(A item)
  {
    Cast c;
    c.pt = this; 
    return (item.getState == c.ui); //should always return true
  }
}
union Cast {Wrap* pt; uint ui;}
//to get dg;
Cast c;
c.ui = state;
&c.pt.func;
this works only if state is the only thing used and if it is not changed.
    
    
More information about the Digitalmars-d-learn
mailing list