C++, давно не виделись :)
CRTP (Curiously
Recurring Template Pattern) — это идиома проектирования,
заключающаяся в том, что класс наследует
от базового шаблонного класса с самим
собой в качестве параметра шаблона
базового класса. Звучит запутано, но в
коде выглядит довольно просто.
template <class T> class base{}; class derived : public base<derived> {};
Что это может
нам дать? Такая конструкция делает
возможным обращение к производному
классу из базового.
template<typename D> struct base { void foo() {static_cast<D*>(this)->bar();} }; struct derived : base<derived> { void bar(); };
Интерфейсы,
статический полиморфизм, примеси
(mixin), инверсии зависимости, Template Design
Pattern – и это все о нем. В смысле, все эти
ништяки можно реализовать с помощью
CRTP.
О способах
использования, достоинствах и недостатках
читайте в исходнике
original post http://vasnake.blogspot.com/2015/02/curiously-recurring-template-pattern.html
Комментариев нет:
Отправить комментарий