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

Комментариев нет:
Отправить комментарий