struct inheritance

Bruno Medeiros brunodomedeiros+spam at com.gmail
Sat Sep 1 06:00:55 PDT 2007


Reiner Pope wrote:
> Bruno Medeiros wrote:
>> Reiner Pope 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
>>>
>>> Template mixins require that the sourcecode of the template is 
>>> available to the compiler. Aliases don't. In this sense at least, 
>>> aliases are cleaner.
>>>
>>>  -- Reiner
>>
>> Huh? Explain how the above alias example would work if the compiler 
>> doesn't know the source code of what is being aliased:
>>
>>   struct M;
>>   struct S {
>>     M m;
>>     alias m this;
>>     int b;
>>   }
>>
>> It's not even possible to declare m without knowing the source of M! 
>> Perhaps I misunderstood you?
>>
> All you need is a declaration of M's interface, you don't need to 
> distribute the source code of your implementation, whereas template 
> mixins require that the implementation source is also available.
> 
>    -- Reiner


You mean like ?

--- foo.di ---
   struct M {
     int a;
     void func();
   }
--- ----
   import foo;
   struct S {
     M m;
     alias m this;
     int b;
   }

And then linking with a foo.obj that has an implementation for M.func?

-- 
Bruno Medeiros - MSc in CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list