Hardcrtp

Что такое CRTP и для чего используется?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

CRTP (Curiously Recurring Template Pattern) — class Derived : public Base<Derived> {};. Базовый класс параметризован своим наследником, что даёт статический полиморфизм без virtual и без overhead.

template<typename Derived>
struct Base {
    void interface() {
        // обращение к Derived через static_cast
        static_cast<Derived*>(this)->implementation();
    }
};

struct Concrete : Base<Concrete> {
    void implementation() { /* специфика */ }
};

Применения: статические интерфейсы, mixins, статические счётчики (свой static на каждый Derived), симуляция dynamic-полиморфизма. Минус: тип Derived должен быть известен на compile-time; нет гетерогенных контейнеров. Широко используется в STL (std::enable_shared_from_this), Eigen, Boost.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.