Functors

BCS ao at pathlink.com
Thu Jun 28 14:14:49 PDT 2007


Reply to Craig,

>> if all you want to do is convert fn ptrs to delegates this works:
>> 
>> |T delegate(A) Fn2Dg(T, A...)(T function(A) f)
>> |{
>> | struct tmp
>> | {
>> | T ret(A args){ return (cast(T function(A))this)(args); }
>> | };
>> | return &(cast(tmp*)f).ret;
>> |}
> I didn't know this was possible.  Are you sure this works? I thought
> there were some issues with calling conventions.
> 
> -Craig
> 

What goes on there is that the context pointer (which is supposed to be a 
object, struct or stack frame) is in fact a function pointer. The calling 
convention for delegates never actually de references the context pointer 
so what is is doesn't matter. In this case I convert it back to a function 
pointer, and then call it with the arguments I was given. All of the values 
in the arguments get copied and arranged correctly for the function call 
and everything is fine and dandy.





More information about the Digitalmars-d mailing list