implicitly convert function pointers to delegates
Jarrett Billingsley
jarrett.billingsley at gmail.com
Sun Oct 26 11:24:55 PDT 2008
On Sun, Oct 26, 2008 at 2:11 PM, KennyTM~ <kennytm at gmail.com> wrote:
> Moritz Warning wrote:
>>
>> Hi,
>>
>> some people discovered that functions can be wrapped into delegates
>> without allocation.
>>
>> Here is one out of several similar solutions:
>>
>> R delegate(T) toDg(R, T...)(R function(T) fp) {
>> struct dg {
>> R opCall(T t) {
>> return (cast(R function(T)) this) (t);
>> }
>> }
>> R delegate(T) t;
>> t.ptr = fp;
>> t.funcptr = &dg.opCall;
>> return t;
>> }
>>
>> I would like to ask if we can get this into the language?
>> It would make working with delegates and function pointers much more
>> easier when function pointers implicitly convert to delegates when they
>> "have to".
>
> vote++ for implicit conversion. An FP can be *safely* converted to any DGs.
>
> BTW,
>
> alias float delegate (in float) DG;
>
> float area (in float radius) {
> float r2 = radius * radius;
> return 3.1415926535 * radius;
> }
>
> DG x;
> x.ptr = null;
> x.funcptr = &area;
> // writefln(typeof(x.funcptr).stringof); // ensure it's an FP not DG.
> writefln(x(10)); // writes 314.159 without any error.
>
>
> Why this simpler solution is not used? The function pointer can't touch the
> frame pointer anyway (an FP cannot access stuff outside its scope).
>
The calling conventions for functions and delegates is different.
This method does not work in the general case.
More information about the Digitalmars-d
mailing list