Any chance to call Tango as Extended Standard Library
Lars Ivar Igesund
larsivar at igesund.net
Wed Jan 21 10:11:58 PST 2009
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
More information about the Digitalmars-d
mailing list