Why can't structs be derived from?

Jens jne at somewhere.org
Tue Mar 15 12:24:29 PDT 2011


Daniel Gibson wrote:
> Am 15.03.2011 19:48, schrieb Jens:
>> 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.
>>
>> It was frowned upon early on because the compiler implementers didn't
>> have their acts together and the resulting objects layout could not
>> be relied upon. The example I gave came from the STL so I think
>> "frowned upon" is something you are picking up from long ago.
>>
>> Composition means access through the members rather than direct
>> access:
>>
>> struct point
>> {
>>     int x;
>>     int y;
>> };
>>
>> struct point3d
>> {
>>     point pt;
>>     int z;
>> };
>>
>> ...
>>
>> point3d mypoint;
>> mypoint.pt.x = 3; // ugly
>>
>
> This is why you add "alias pt this;" to point3d. So you can write
>  mypoint.x = 3;
>

Still ugly though. 




More information about the Digitalmars-d mailing list