Andrei Alexandrescu wrote: > Lars Ivar Igesund wrote: >> Andrei Alexandrescu wrote: >> >>> Lars Ivar Igesund wrote: >>>> Andrei Alexandrescu wrote: >>>> >>>>> Lars Ivar Igesund wrote: >>>>>> No, you misunderstand. I said safely call, not exceptionally >>>>>> efficient. To me a virtual call would be acceptable. However, at >>>>>> least in my cases, there would normally not be more than one >>>>>> imlemented interface and such it would be a tiny vtable. >>>>> Ok, so the scope is reducing nicely. We now have a few problems to >>>>> solve (some details glossed over for simplicity). >>>>> >>>>> a) Get from void* to the TypeInfo that's typing that void*. This >>>>> will involve a search as the void* could point really anywhere, >>>>> including untyped memory. So we have a core function: >>>>> >>>>> TypeInfo fromAddress(void * p); >>>>> >>>>> b) Starting from a TypeInfo, get an interface in case the >>>>> underlying struct implements that interface: >>>>> >>>>> Object TypeInfo.QueryInterface(TypeInfo someInterface); >>>>> >>>>> c) Finally, given a void* and an interface, invoke a method of that >>>>> interface: >>>>> >>>>> T structCast!(Interface)(p).method(arguments); >>>> Since you used template lingo, it looks a bit like compile time >>>> functionality, but yes, very close now :) >>>> >>>> Also (I keep forgetting to mention important details) - I typically >>>> see this used in variadic functions, such that the typeinfo already >>>> is there. >>> But what are you ultimately trying to accomplish, and why do you must >>> lose all static information since it was just available to the caller? >>> Isn't there a simpler way to achieve your goal (e.g. using the new >>> variadics)? You are essentially asking for full-blown runtime scripting >>> for all structs. >> >> Sorry; new variadics? > > http://www.digitalmars.com/d/2.0/variadic-function-templates.html > > Your use case suggests you are using the "look, ma, no templates" > solution, whereas the new variadics are shown below that section.
Right, but the "new variadics" cannot (being templates) be virtual (which at least sometimes is useful). -- Lars Ivar Igesund blog at http://larsivi.net DSource, #d.tango & #D: larsivi Dancing the Tango