Как сделать наследование (возможно, множественное)
От: Плотников Д. Россия  
Дата: 23.11.05 10:54
Оценка:
Вопрос вроде бы немного по архитектуре, но я все-таки решил его в С++ запостить. Надеюсь не сильно ошибся .

Есть несколько (достаточно много) классов с общим родителем. У родителя есть несколько виртуальных функций:

class Base
{
public:
    virtual void F1();
    virtual void F1();
    virtual void F1();
};


Само собой во многих наследованных классах эти функции реализуются по-своему. Но дело в том, что этих реализаций для каждой функции существует 3-4, а в каждом классе они обычно они используются в различных комбинациях. Т. е. получается, что конечные классы как бы группируются по трем (в данном случае) признакам.

Вопрос в том, как это сделать без копи-пасты.

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

У меня была мысль использовать множественное наследование. Создать на каждую реализацию классов:

class F1Impl1 : public Base {};
class F1Impl2 : public Base {};

class F2Impl1 : public Base {};
...


и потом в конкретном классе только выбирать реализации:

class TheClass : public F1Impl1, public F2Impl1 {};


но это по понятным причинам не канает (в смысле канает очень плохо ).

Возможно это можно сделать с шаблонами. Типа как стратегии у Александревску. Но как это сделать я понять не могу. Мне надо, чтобы реализации имели доступ к protected мемберам классов-предков.

Может я что-нибудь очевидное упустил?

Буду рад любому совету.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.