Old problem with performance
Denis Koroskin
2korden at gmail.com
Mon Feb 9 13:02:10 PST 2009
On Mon, 09 Feb 2009 15:53:59 +0300, Don <nospam at nospam.com> wrote:
> Michel Fortin wrote:
>> On 2009-02-09 07:00:56 -0500, Weed <resume755 at mail.ru> said:
>>
>>>> No. By forbiding the cases that leads to slicing, like returning a
>>>> polymorphic object by value.
>>>
>>> Let's think, can there are other ways to solve problem?
>>>
>>> Here, for example my reasons:
>>> http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=81958
>> I'm
>>>
>> not sure I'm getting what you mean in that post.
>> It seems like you want the ability to copy classes, and thus pass them
>> by value, but only when there would be no type conversion.
>> I'm not getting where this can be useful though: by forcing your
>> classes to be of a specific type, with no derived types allowed, you're
>> losing polymorphism. The only advantage you have is that your type can
>> be derived from another so you can reuse some of its implementation.
>> There are other ways to acheive that in D however (mixins come to mind).
>>
>
> The one case I could think of was the strategy pattern: no data is added
> (including, no virtual functions) -- the only thing that's added is a
> different implementation of an existing virtual function. In such a
> situation, the slicing problem cannot happen.
Michel has posted (2 posts up) an example of a class that happen to have no member fields at all (virtual methods only). And yet it still suffers from slicing.
> You can have an array of
> polymorphic types. But the language won't allow it.
>
> However, I've encountered this problem in C++ as well. Allowing
> stack-based classes is NOT sufficient to solve it. What you actually
> want is a struct with a vtable pointer stored IN the struct itself
> (rather than one instance of the vtable per struct).
More information about the Digitalmars-d
mailing list