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