Я использую шаблон метода шаблона в своем проекте, например, следующий
class Template
{
public:
void algorithm();
{
A();
B();
}
private:
virtual void A()=0;
virtual void B()=0;
}
У меня есть несколько подклассов, реализующих методы A и B по-разному.
Но теперь мне нужен новый класс Template2, чтобы реализовать немного другой алгоритм.
class Template2
{
public:
void algorithm();
{
A();
B();
C();
}
private:
virtual void A()=0;
virtual void B()=0;
void C()
{
//some stuff
A();
//some stuff
B();
}
}
C идентичен во всех подклассах, поэтому я не делаю его виртуальным.
Прямо сейчас я создаю новую иерархию наследования на основе Template2, но это кажется глупым, потому что Мне нужно скопировать и вставить код каждого подкласса в эту новую иерархию.
Можно ли сделать это более элегантным способом?
РЕДАКТИРОВАНИЕ
Извините, я не совсем ясно выразился.
Теперь у меня есть две иерархии наследования.
1. Абстрактный класс Template
и несколько подклассов A1,A2,A3,A4...
2. Абстрактный класс Template2
и несколько подклассов B1,B2,B3,B4...
Это работает нормально, но мне интересно, есть ли способ каким-то образом объединить эти две иерархии, потому что A1 и B1 имеют один и тот же код, за исключением того, что они получены из Template и Template2 соответственно.
Является ли решение шаблоном метода шаблона, для меня не имеет значения
Оба ответа bcperth и Spotted работают для меня :)
Большое спасибо.