On Tue, 18 Nov 2008 17:17:36 +0300, 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).



What if class T has multiple foo() overloads, half of which are virtual and half are not?

Reply via email to