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

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

Изменено 26.12.2016 15:34 kov_serg

Здравствуйте, gencoder, Вы писали:

G>Хотелось бы сделать несколько иное в итоге: перед сборкой проекта просто сконструировать новый класс путем наследования базового класса и некоторой примеси (или нескольких примесей)

G>
G>class FinalScene: public Scene, public Scene25Mixin, public Scene125Mixin 
G>{ 
G>public: 
G>    FinalScene(QWidget * p): Scene(p) { magicDrawFirst(); /*from 25*/ magicDrawSecond(); /*from 125*/ } 
G>};
G>


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

G>P.S.2 без шаблонов похоже никак ?

Вот то что вы хотите, но лично бы я так не делал
#include <stdio.h>

struct Base {
    int handle;
    Base(int handle=9) : handle(handle) {}
};

struct Mix1 : virtual Base {
  void do1() { printf("1-%d\n",handle); }
};

struct Mix2 : virtual Base {
  void do2() { printf("2-%d\n",handle); }
};

struct Res : virtual Base,Mix1,Mix2 {
    Res(int handle) : Base(handle) { do1(); do2(); }
};

int main(int argc,char** argv) {
    Res res(123);
    return 0;
}
Здравствуйте, gencoder, Вы писали:

G>Хотелось бы сделать несколько иное в итоге: перед сборкой проекта просто сконструировать новый класс путем наследования базового класса и некоторой примеси (или нескольких примесей)

G>
G>class FinalScene: public Scene, public Scene25Mixin, public Scene125Mixin 
G>{ 
G>public: 
G>    FinalScene(QWidget * p): Scene(p) { magicDrawFirst(); /*from 25*/ magicDrawSecond(); /*from 125*/ } 
G>};
G>


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

G>P.S.2 без шаблонов похоже никак ?

Вот то что вы хотите, но лично бы я так не делал
#include <stdio.h>

struct Base {
    int handle;
    Base(int handle=0) : handle(handle) {}
};

struct Mix1 : virtual Base {
  void do1() { printf("1-%d\n",handle); }
};

struct Mix2 : virtual Base {
  void do2() { printf("2-%d\n",handle); }
};

struct Res : virtual Base,Mix1,Mix2 {
    Res(int handle) : Base(handle) { do1(); do2(); }
};

int main(int argc,char** argv) {
    Res res(123);
    return 0;
}