Why can't structs be derived from?

Jens jne at somewhere.org
Tue Mar 15 12:40:11 PDT 2011


Daniel Gibson wrote:
> Am 15.03.2011 20:24, schrieb Jens:
>> 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.
>>
>
> I don't think so. It makes obvious what happens: a composition -
> *not* an inheritance - with syntactic sugar that allows one to omit
> the .pt in mypoint.(pt.)x - as long as mypoint doesn't have a member
> x itself.
>

YMMV. To me it's ugly enough to not take the language seriously.

> Allowing inheritance syntax on structs would only lead to confusion -
> especially for people coming from C++.
>

C++ does it that way, so what confusion are you talking about?




More information about the Digitalmars-d mailing list