Why can't structs be derived from?

Steven Schveighoffer schveiguy at yahoo.com
Wed Mar 16 14:37:13 PDT 2011


On Wed, 16 Mar 2011 17:24:34 -0400, Simen kjaeraas  
<simen.kjaras at gmail.com> wrote:

> On Wed, 16 Mar 2011 22:05:49 +0100, Steven Schveighoffer  
> <schveiguy at yahoo.com> wrote:
>
>> On Wed, 16 Mar 2011 16:49:53 -0400, Simen kjaeraas
>> <simen.kjaras at gmail.com> wrote:
>>
>>> On Wed, 16 Mar 2011 16:23:47 +0100, Steven Schveighoffer  
>>> <schveiguy at yahoo.com> wrote:
>>>
>>>> struct Point2 {
>>>>     int x, y;
>>>>     void draw(Canvas c) {...}
>>>> }
>>>>
>>>> struct Point3 : Point2 {
>>>>     int z;
>>>>     void draw(Canvas c) {...}
>>>> }
>>>>
>>>> Point3 p3;
>>>> Point2 *p2 = &p3;
>>>>
>>>> // what does this do?
>>>> p2.draw(c);
>>>
>>> Nothing. You should got a type error upon attempting to assign a p3*  
>>> to a p2*.
>> The point is, if we allow inheritance on structs, it causes more  
>> confusion to people who expect certain things from inheritance than it  
>> beautifies syntax.
>
> I agree. I also prefer alias this, both for its flexibility and its
> distinctiveness. I just felt that the slicing problem is trivially fixed,
> and thus need not be a part of the discussion.

The slicing problem is not encountered in this example.  Pointing at the  
base of a derived object does not slice the object.  Your rule is too  
strict ;)

-Steve


More information about the Digitalmars-d mailing list