Я использую шаблон шаблона метода в моем проекте, как показано ниже
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 у меня работают :)Большое спасибо.