Hardmixin
Что такое mixin и как его реализовать в C++?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Mixin — класс, добавляющий функциональность другому классу без быть его «базой» в классическом смысле. Позволяет компоновать функциональность: класс «собирается» из mixin’ов как из Lego.
// CRTP-mixin: счётчик экземпляров
template<class Derived>
class Counter {
static inline int count_ = 0;
public:
Counter() { ++count_; }
~Counter() { --count_; }
static int count() { return count_; }
};
class Widget : public Counter<Widget> { // добавили функциональность
// ...
};
Widget w1, w2;
Widget::count(); // 2Способы реализации:
- CRTP —
class Counter<T>, производный наследуетCounter<Derived>; - MI с small policy classes —
class Foo : public Counter, public Logger {}; - Policy-based design — шаблон с параметром-политикой.
Преимущества: повторное использование без глубоких иерархий. Недостатки: сложность, коллизии имён.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.