Используйте множественное наследование для представления объединения атрибутов реализации
Причина
Некоторые виды миксинов имеют состояние и зачастую операции над этим состоянием. Если операции виртуальные, использование наследования необходимо; в противном случае использование наследования может избежать шаблонного кода и переадресации.
Пример
class iostream : public istream, public ostream { // очень упрощённо
// ...
};
istream предоставляет интерфейс для операций ввода (и некоторые данные); ostream предоставляет интерфейс для операций вывода (и некоторые данные). iostream предоставляет объединение интерфейсов istream и ostream и синхронизацию, необходимую для обеспечения обоих на одном потоке.
Примечание
Это относительно редкое использование, поскольку реализация зачастую может быть организована в иерархию с единственным корнем.
Пример
Иногда «атрибут реализации» больше похож на «миксин», определяющий поведение реализации и вводящий члены для обеспечения поддерживаемых ею политик. Например, см. std::enable_shared_from_this или различные базы из boost.intrusive (например, list_base_hook или intrusive_ref_counter).
Контроль
???