Mixin в С++ или как получить доступ к безымянным предкам
От: gencoder  
Дата: 26.12.16 13:11
Оценка:
Вопрос по архитектуре.

Требуется предусмотреть расширение функциональности некоторого класса GLScene (не обязательно весь функциональный набор будет использован в финальной сборке).
Функциональность связана с рисованием некоторых сцен (тестовых).

Для этого создаем классы примеси Scene1Mix, Scene2Mix. Каждый из классов хранит указатель w на объект типа окно QGLWidget на котором будет выполняться рисование.

Вопрос: как правильно передать указателю w указатель на безымянный объект типа QGLWidget (т.е. на GLScene)?
Или подскажите более подходящее архитектурное решение.

class GLScene: public QGLWidget {
   ...
};

class Scene1Mixin {
   QGLWidget * w;
public:
   Scene1Mix( QGLWidget * _w ) { w = _w ; }
   draw1(){ w.glBegin(/* ...*/;}
}
class Scene2Mixin {
   QGLWidget * w;
public:
   Scene2Mix( QGLWidget * _w ) { w = _w ; }
   draw2(){ w.glBegin(/* ...*/;}
}

class Scene1: public GLScene, public Scene1Mix {
       Scene1( /*...*/ ) { /* w = this???; ...*/ draw1(); }
}


поправил заголовок, чтобы не вводить во смущение — Кодт
Отредактировано 27.12.2016 12:07 Кодт . Предыдущая версия . Еще …
Отредактировано 26.12.2016 13:26 gencoder . Предыдущая версия .
множественное наследование mixin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.