С достаточно давних времён известен нетривиальный шаблон проектирования, когда производный класс передаётся в параметре базового:
Этот шаблон имеет своё собственное название – CRTP: Curiously Recurring Template Pattern, что переводится как «странно повторяющийся шаблон». В данной статье подробно рассматривается его обобщение на цепочку наследований. Несмотря на то, что это, в общем-то, тоже известная вещь и имеет серьёзные и реальные применения, мне не приходилось с этим сталкиваться на практике ранее и я об этом не знал, а потому ради интереса вывел всё самостоятельно. Да, это действительно можно сделать, но ради этого пришлосьотдать душу довольно серьёзно повозиться. Чтобы узнать, как это у меня получилось, за подробностями приглашаю читать дальше эту статью.
template<class T> class Base
{
…
};
class Derived : public Base<Derived>
{
…
};
Этот шаблон имеет своё собственное название – CRTP: Curiously Recurring Template Pattern, что переводится как «странно повторяющийся шаблон». В данной статье подробно рассматривается его обобщение на цепочку наследований. Несмотря на то, что это, в общем-то, тоже известная вещь и имеет серьёзные и реальные применения, мне не приходилось с этим сталкиваться на практике ранее и я об этом не знал, а потому ради интереса вывел всё самостоятельно. Да, это действительно можно сделать, но ради этого пришлось