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