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