Why can't structs be derived from?

Jens jne at somewhere.org
Tue Mar 15 11:48:55 PDT 2011


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

>
> The reason for the allegedly ugly syntax is that it's considerably
> more general.

Over-generality is a key thing that gets languages in trouble.

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

What's wrong with conversion operators? I wouldn't use "simple" and 
"ugly" in the same sentence. I would have chosen a different design. 




More information about the Digitalmars-d mailing list