Why can't structs be derived from?

KennyTM~ kennytm at gmail.com
Wed Mar 16 16:16:15 PDT 2011


On Mar 16, 11 23:01, 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;

Should be "alias point2 this;"

(strengthening the argument that this syntax is not good?)

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



More information about the Digitalmars-d mailing list