struct inheritance

Bill Baxter dnewsgroup at billbaxter.com
Thu Aug 30 18:11:18 PDT 2007


Robert Fraser wrote:
> Bill Baxter Wrote:
> 
>> Let us all turn our copies of WalterAndrei.pdf to page 40 where yea 
>> verily it doth say:
>>
>>      struct M { int a; }
>>      struct S {
>>         M m;
>>         alias m this;
>>         int b;
>>      }
>>
>> Why not just allow mixin to do this?
>>
>>      struct M { int a; }
>>      struct S {
>>         mixin M;
>>         int b;
>>      }
>>
>> That's basically the way it's done now except now it would be more like:
>> template MMixin() { int a; }
>> struct M { mixin M; }
>> struct S { mixin M; int b; }
>>
>> Just let us treat a struct like a zero arg template for mixin purposes.
>>
>> --bb
> 
> It amounts to the same thing, so it just depends on which syntax you prefer. Personally, I like...
> 
> struct S : M { int b; }
> 
> ... meaning S is non-polymorphically inherited from M. I guess the argument against taht syntax was that it would be confusing for people from a C++ background who assume polymorphic inheritance for structs.
> 
> Anyways, it's up to Walter to decide on the syntax, and he says "alias this".

I did just think of one issue which is that constructors/opCalls for M 
would be weird.  S needs to decide how to initialize the M part, which 
would be difficult if M's constructors are just mixed in directly.

I guess from a compiler-writers perspective "alias this" is more like 
what actually happens when you inherit in typical C++ fashion.  In that 
case I guess I'd prefer 'import'

       struct M { int a; }
       struct S {
          import M;
          int b;
       }

then you can specify when you need to access the M parts just like you 
do in C++ by M.member.

I'd even prefer "alias m .;" to "alias m this;".  It just seems wrong 
and goes against the nice happy view that 'this' is just an implicitly 
defined pointer member.

--bb



More information about the Digitalmars-d mailing list