Helper objects to create delegates

Jason House jason.james.house at gmail.com
Thu May 31 16:03:10 PDT 2007


Daniel Keep wrote:
> 
> Jason House wrote:
>> I have a multi-threaded application where I pass delegates between
>> threads.  While I thought this was a good design in the beginning, I
>> find myself having to create a lot of helper objects...  Is there any
>> way to avoid all the extra typing?  Any candidate additions to the
>> language that'd help? :)
>>
>> The following results in a run time error:
>> void example(){
>>   foreach(foo x; objectList)
>>     passDelegate({x.func(7);});
>> }
>>
>> The following works but is annoying to keep typing:
>>
>> class Helper{
>>   foo x;
>>   int param;
>>   this(foo _x, int _param){
>>     x     = _x;
>>     param = _param;
>>   }
>>   void opCall(){x.func(param);}
>     static void delegate() create(foo x, int param)
>     {
>       return &(new Helper(x,param)).opCall;
>     }
>> }
>> void example(){
>>   foreach(foo x; objectList)
>>     passDelegate(Helper.create(x,7));
>> }
> 
> Like that?
> 
> 	-- Daniel
> 

... or very similar.  I think I mean to do
passDelegate( &(new Helper(x,7)).opCall );

I found std.bind which provides the functionality I was looking for. 
The .ptr() threw me for a loop, but I have it down now.

passDelegate( bind(&x.func,7).ptr() );


More information about the Digitalmars-d-learn mailing list