Что такое curiously recurring template pattern (CRTP)? Когда его использовать?
Curiously Recurring Template Pattern (CRTP) (примерный перевод: Странно рекурсивный шаблон проектирования или Странно повторяющийся паттерн) — идиома языка C++, состоящая в том, что некоторый класс X наследуется от шаблона класса, использующего X как шаблонный параметр.
Пример:
// The Curiously Recurring Template Pattern (CRTP)
template<class T>
class Base
{
// methods within Base can use template to access members of Derived
};
class Derived : public Base<Derived>
{
// ...
};
Используется для статического полиморфизма:
template <class T>
struct Base
{
void interface()
{
// ...
static_cast<T*>(this)->implementation();
// ...
}
static void static_func()
{
// ...
T::static_sub_func();
// ...
}
};
struct Derived : Base<Derived>
{
void implementation();
static void static_sub_func();
};
Источник: https://ru.wikipedia.org/wiki/Curiously_recurring_template_pattern
Что же из себя представляет CRTP? CRTP можно описать буквально в одном предложении: CRTP моделирует ситуацию при которой класс-наследник наследует класс-родитель параметризированный классом-наследником.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как правильно сравнивать два числа типа float и double? Следующий способ часто говорит, что одинаковые числа различны: