On 10 June 2013 16:50, Jacob Carlborg <[email protected]> wrote: > On 2013-06-08 01:21, Manu wrote: > >> So from my dconf talk, I detailed a nasty hack to handle member function >> pointers in D. >> My approach is not portable, so I'd like to see an expression formalised >> in D, so this sort of interaction with C++ is possible, and also it may >> be useful in D code directly. >> >> I'm thinking something like this... Keen to hear thoughts. >> >> My approach was this: >> void function(T _this, ...args...); >> >> Explicit 'this' pointer; only works with ABI's that pass 'this' as the >> first integer argument. >> >> What I suggest is: >> void function(T this, ...args...); >> >> Note, I use keyword 'this' as the first argument. This is the key that >> distinguishes the expression as a member-function pointer rather than a >> typical function pointer. Calls through this function pointer would know >> to use the method calling convention rather than the static function >> calling convention. >> >> For 'extern(C++) void function(T this)', that would be to use the C++ >> 'thiscall' convention. >> >> I think this makes good sense, because other than the choice of calling >> convention, it really is just a 'function' in every other way. >> > > Can't we just say that a delegate declared as extern(C++) is a member > function?
That seems pretty awkward to me. Basically a hack. A function pointer is not a delegate, so I don't see why that should be used to describe one. Also, extern(C++) delegates are useful too in their own right Or do you want to use member functions without connecting to C++ as well? I haven't needed to yet... but that doesn't mean it might not be useful. It would probably be used in D for tight binding with other systems. AngelScript binds to native code with member function pointers... just off the top of my head.
