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

Способы реализации:

  • CRTPclass Counter<T>, производный наследует Counter<Derived>;
  • MI с small policy classesclass Foo : public Counter, public Logger {};
  • Policy-based design — шаблон с параметром-политикой.

Преимущества: повторное использование без глубоких иерархий. Недостатки: сложность, коллизии имён.

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

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

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