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 подскажет развёрнутый ответ в реальном времени.