How Nested Functions Work, part 1

Jarrett Billingsley jarrett.billingsley at gmail.com
Thu Sep 3 16:30:39 PDT 2009


On Thu, Sep 3, 2009 at 7:10 PM, grauzone<none at example.net> wrote:
>
> Probably the same type as .ptr?

void*? That's just silly. Let's just throw all static typing out the window. :P

> And by the way, I find it really strange, that .funcptr results into an
> incorrectly typed function pointer, that basically has the wrong calling
> convention for the destination code, which usually is a method. It'd be
> different if signature of the .funcptr included an explicit argument for the
> hidden pointers. So that you could write: dg.funcptr(dg.ptr, arguments);

Yeah. There probably needs to be an extern(this) or so for functions
that take a context pointer, like __thiscall in VC++. The way it works
now is rather unsafe.

> And that's about the only reason to keep them.
>
> But wouldn't it be possible for the compiler to allow assignment of a
> function pointer to a delegate? All the compiler had to do is to generate a
> hidden dispatch method to "translate" the different calling conventions. The
> delegate's .funcptr points to that dispatch function, and the dispatch
> function call the actual function. If the assigned function pointer is not a
> statically known function (but from a variable), the function address could
> be stored in the delegate's .ptr. Would this work?

Of course it'd work. And D APIs would take delegates and everyone
would be happy. But it still doesn't really justify getting rid of raw
function pointers.



More information about the Digitalmars-d mailing list