HardCRTP
Что такое CRTP и где применяется?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
CRTP (Curiously Recurring Template Pattern): class Derived : public Base<Derived>. База параметризована производным классом и вызывает его методы через static_cast<Derived*>(this) — статический полиморфизм без vtable.
template<class Derived>
struct Comparable {
bool operator>(const Derived& o) const {
return o < *static_cast<const Derived*>(this);
}
};
class Widget : public Comparable<Widget> {
public:
bool operator<(const Widget&) const;
}; // Widget получает operator> бесплатно- Применяется для миксинов, статических интерфейсов,
std::enable_shared_from_this; - Преимущества: нет overhead, inlining работает;
- Минусы: нет heterogeneous collection (нужна динамическая база), сложность.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.