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