Re[4]: Доопределение методов подклассов при наследовании
От: Acteon  
Дата: 18.06.10 11:12
Оценка:
Здравствуйте, Кодт, Вы писали:

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


A>>Подход 6. Потерялось наследование Concreate от Base.

К>Не потерялось. Base и Concrete — финальные классы.

Все, увидел. Оно просто реализуется через myself(). Я правильно понял?

A>>А зачем класс Concrete дружит с классом friend class BaseT<Base>; ? И кстати, зачем вообще объявлена дружба с классом, от которого мы наследуемся?


К>Затем, что перегружаемый член m_thread (к которому обращается базовый класс) засунут в private:


Да, увидел, понял. А то что Concrete дружит с классом BaseT<Base> вместо BaseT<Concrete> просто ошибка.

A>>Подход 7. В бусте потоки в связке с биндерами очень мощные. Но к сожалению, я вынужден использовать Qt для этих целей. Работаем с тем, что есть, а не с тем чем хочется.


К>Но хотя бы boost:: / std::tr1:: bind можно использовать?


Нет. Проект уже давний, на чем пишут, на том пишут. Но уже раз десять сталкивался с тем, что приходилось писать велосипеды, т.к. в Qt нет того, что есть в бусте. Даже элементарный non_copyable реализован не так как надо.

К>Всегда же можно сделать санки (thunk) в ООП-стиль.

К>[c]
К>template<class Fun> struct FunThread: Thread \\ Ошибочка.
К>{
К> Fun m_fun;
К> explicit FunThread(Fun fun) : m_fun(fun) {}
К> virtual void run() /*override*/ { m_fun(); }
К>};

И получится уже что-то близкое к бустовским потокам. Это уже 11-й раз. За идею спасибо.

A>>В общем пока примерял все подходы, родилась еще одна идея. Унаследовать класс Base от класса Thread. Получилось что-то на подобие вот этого здесь Критика приветствуется.


К>Ну, в принципе, так нередко делают. Когда объект — сам себе представитель потока (или, кстати, представитель окна).

К>Есть два подхода к архитектуре.
К>- с иерархией тяжеловесных объектов, реализующих поведение потоков, окон, и т.п.
К>- с единообразными хэндлами и разнообразными объектами-владельцами, не обязательно связанными в одну иерархию.
К>Для Qt, как и для многих ООП-фреймворков, характерно первое.

К>Тут надо смотреть на цену этого склеивания. Потому что потом расклеить объект на поток и всё остальное будет мучительно.

К>Но если расклеивать не собираешься, то почему бы и нет?

Ясно, спасибо. Разъединять их в будущем не собираюсь. Оставим будущие проблемы — потомкам.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.