Вопрос вроде бы немного по архитектуре, но я все-таки решил его в С++ запостить. Надеюсь не сильно ошибся
.
Есть несколько (достаточно много) классов с общим родителем. У родителя есть несколько виртуальных функций:
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 мемберам классов-предков.
Может я что-нибудь очевидное упустил?
Буду рад любому совету.