On Tue, Nov 18, 2008 at 9:17 AM, Michel Fortin <[EMAIL PROTECTED]> wrote: > On 2008-11-17 13:56:55 -0500, Harry Vennik <[EMAIL PROTECTED]> said: > >> Hi, >> >> One of the things D claims is that it eliminates the need for IDL. And >> yeah, it does a lot in that direction, but I found something that's missing >> while trying to actually implement some sense of RPC... >> >> To get a good view of an interface that can be used to construct the >> necessary stub code, you need to have a typed vtable. And D almost provides >> it... You can get the untyped vtable, you can get a typed list of virtual >> function overloads by name, and you can get the names of all interface >> members... So you can get all what's needed, except that there is no way to >> know the vtable index of a member function!!! >> >> My proposal to fix this is to allow an expression like: >> >> __traits(getVirtualFunctions, T) // no second argument! >> >> where T is an interface or class type (or an expression of such a type). >> Such an expression should then return all virtual member functions in vtable >> order, thus making it possible to relate the function itself to its vtable >> index. > > Personally, I had to work around the same problem in the D/Objective-C > bridge and thus I could probably simplify a few things by having this, > except that what I need in my case is always the vtable index of a > particular function. I guess it could be implemented from the above __traits > syntax, but I'd wish for a simpler solution to my problem, such as: > > __traits(getVTableIndex, T.foo); > > along with a way to check if a function is virtual, possibly by checking > they're not final: > > static if (is(T.foo == final)) ...; > > This way I could build a pointer template-struct to a virtual member > function (without knowing the target object in advance as with delegates).
A pointer template-struct to a virtual member function without knowing the target object in advance? Something like this: http://codepad.org/SXIP2jBL ?
