Информация об изменениях

Сообщение Re[2]: Minix в С++ или как получить доступ к безымянным пред от 26.12.2016 14:23

Изменено 26.12.2016 14:38 gencoder

Хотелось бы сделать несколько иное в итоге: перед сборкой проекта просто сконструировать новый класс путем наследования базового класса и некоторой примеси (или нескольких примесей)
class FinalScene: public Scene, public Scene25Mixin, public Scene125Mixin 
{ 
public: 
    FinalScene(QWidget * p): Scene(p) { magicDrawFirst(); /*from 25*/ magicDrawSecond(); /*from 125*/ } 
};


P.S. просто "закинуть" в класс несколько методов (использование порождающих паттернов здесь не нужно, т.к. до сборки проекта будет набираться функционал из классов примесей)

Здравствуйте, kov_serg, Вы писали:
_
_>Уберите всё из конструктора и замените private на protected:
_>
_>struct Scene1Mixin {
_>  Scene1Mix() { w=0; }
_>  virtual ~Scene1Mix() {}
_>  void setWidget(QGLWidget *w) { this->w=w; }
_>  void draw1(){ w->glBegin(/* ...*/;}
_>protected:
_>  QGLWidget * w;
_>};

_>struct Scene1 : Scene1Mixin {
_>  void draw2() { draw1(); w->...  }
_>};

_>Scene1* createScene1(QGLWidget * w) {
_>  Scene1 *s=new Scene1();
  s->>setWidget(w);
_>  //s->someOtherMagic();
_>  return s;
_>}
_>

_>И создание переложи на отдельный клас
Re[2]: Minix в С++ или как получить доступ к безымянным пред
Хотелось бы сделать несколько иное в итоге: перед сборкой проекта просто сконструировать новый класс путем наследования базового класса и некоторой примеси (или нескольких примесей)
class FinalScene: public Scene, public Scene25Mixin, public Scene125Mixin 
{ 
public: 
    FinalScene(QWidget * p): Scene(p) { magicDrawFirst(); /*from 25*/ magicDrawSecond(); /*from 125*/ } 
};


P.S.1 просто "закинуть" в класс несколько методов (использование порождающих паттернов здесь не нужно, т.к. до сборки проекта будет набираться функционал из классов примесей)
P.S.2 без шаблонов похоже никак ?

Здравствуйте, kov_serg, Вы писали:
_
_>Уберите всё из конструктора и замените private на protected:
_>
_>struct Scene1Mixin {
_>  Scene1Mix() { w=0; }
_>  virtual ~Scene1Mix() {}
_>  void setWidget(QGLWidget *w) { this->w=w; }
_>  void draw1(){ w->glBegin(/* ...*/;}
_>protected:
_>  QGLWidget * w;
_>};

_>struct Scene1 : Scene1Mixin {
_>  void draw2() { draw1(); w->...  }
_>};

_>Scene1* createScene1(QGLWidget * w) {
_>  Scene1 *s=new Scene1();
  s->>setWidget(w);
_>  //s->someOtherMagic();
_>  return s;
_>}
_>

_>И создание переложи на отдельный клас