Why can't structs be derived from?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Mar 16 08:36:20 PDT 2011


On 03/16/2011 10:01 AM, Ary Manzana wrote:
> On 3/15/11 3:29 PM, Andrei Alexandrescu wrote:
>> On 3/15/11 12:55 PM, Jens wrote:
>>> Steven Schveighoffer wrote:
>>>> That's all there is. Structs do not have inheritance, only alias
>>>> this.
>>>
>>> Why don't they though? Inheritance does not have to mean polymorphic. It
>>> can mean composition, like in C++. I don't understand the reason for
>>> such
>>> ugly syntax.
>>
>> Using inheritance for composition is frowned upon in C++ for good
>> reasons. If you want composition, the best is to use composition.
>>
>> The reason for the allegedly ugly syntax is that it's considerably more
>> general. It is often the case that a struct defines an entity that is
>> implicitly convertible to another entity - could be an rvalue vs.
>> lvalue, a class vs. another struct vs. a primitive type, could need a
>> run-time operation etc. Inheritance would offer at best few of these
>> amenities, whereas 'alias this' offers all with a simple syntax.
>>
>>
>> Andrei
>
> Syntax matters. A lot. Which one is more readable/understandable?
>
> struct Point2 {
> int x;
> int y;
> }
>
> 1.
>
> struct Point3 {
> Point2 point2;
> alias this point2;
> int z;
> }
>
> 2.
>
> struct Point3 : Point2 {
> int z;
> }
>
> You can't deny this last one is much more easier to understand and it
> exactly does what your mind want to do: just give me what's in the other
> struct and let me add more things.
>
> The compiler can implement this using alias this and making the aliased
> member private, and possibly disallowing adding another alias this.

The main issue is that inheritance is a very blunt tool. It is so much 
so that today it is much less applicable than it had been previously 
thought. alias this provides the degree of control necessary. So the 
comparison is apples to oranges - it compares all inheritance can do 
with a minor case of alias this.

Andrei


More information about the Digitalmars-d mailing list