Old problem with performance

Don nospam at nospam.com
Mon Feb 9 04:53:59 PST 2009


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. 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