"Patrick Down" <Patrick_member@pathlink.com> wrote in message news:c6bg2p$146t$1@digitaldaemon.com...
 
Good expansion of the  code Patrick, as it shows how process can flow though the
aggregated objects, however, there is one thing I would like to comment on.
 
> >
> >class Lamp : public Light,
> >             mixin Body      cBody,
> >             mixin Switch    cSwitch,
> >             mixin Globe     cGlobe,
> >             mixin PowerCord cPowerCord
> >{
> >public:
> >    Lamp() :  Light(), cBody(), cSwitch(cPowerCord,cGlobe), cGlobe(), cPowerCord() {}
> >}
> >
 
Versus

> class Lamp : public Light {
> public:
>     Lamp()  {}
>
> private:
>     mixin Body         cBody;
>     mixin Switch       cSwitch(cPowerCord,cGlobe);
>     mixin Globe        cGlobe;
>     mixin PowerCord    cPowerCord;
> }
 
Originally, I too had the your later syntax, but changed it the the former for the reasons;
 
1.   Most object diagrams show aggregated objects as external objects, not internal. For example;
External versus Internal Mixin calls
2.   In your example, you have placed (correctly may I say) the aggreagated objects as private.
      However, the code is accessing methods of these objects as though they were public.
      By placing the object declarations outside of the class, they can assume their original
      access status.
 
3.   As there will be many C++ programs that have been using MI for aggregation techniques,
      it would be easier to port these to D if their syntax was to remain similiar in structure. 
 
I myself fit firmly in the the last categor. There is slabs and slabs of C++ code that I would
like to correct the invalid use of Multiple Inheritance to perform Agregation operations.
 
Criticism/Comments ?