Что такое CRTP?

156
20 мая 2019, 09:30

Что такое curiously recurring template pattern (CRTP)? Когда его использовать?

Answer 1

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

Answer 2

Что же из себя представляет CRTP? CRTP можно описать буквально в одном предложении: CRTP моделирует ситуацию при которой класс-наследник наследует класс-родитель параметризированный классом-наследником.

READ ALSO
Структура классов

Структура классов

Всех приветствуюНедавно начал свой путь изучения C++

146
Добавить кнопку на виджет Qt

Добавить кнопку на виджет Qt

Нужна функция добавления кнопки на виджет

170
Как работает pow() в С++?

Как работает pow() в С++?

Решил глянуть код С++ -ного pow()Как это работает?

190
Как сравнить float и double?

Как сравнить float и double?

Как правильно сравнивать два числа типа float и double? Следующий способ часто говорит, что одинаковые числа различны:

118