CppCoreGuidelines C.136 使用多重继承来表示实现属性的集合
21 December 2022
“Use multiple inheritance to represent the union of implementation attributes”
理由
某些形式的混合类有状态,并且基于这些状态操作运行。如果这些操作是虚的,则需要使用继承。如果不是虚的,则使用继承能够避免样板代码和forwarding。
例子
class iostream : public istream, public ostream { // very simplified // ... };
istream
提供输入操作接口(以及一些数据), ostream
提供输出操作接口(以及一些数据)。 iostream
提供 istream
和 ostream
接口的集合以及输入输出之间的同步。
注意
这是很少使用的方法,因为实现的时候也会组织成单根节点的继承层级。
例子
有时候,一个“实现属性”更像一个混合类(mixin),通过注入成员来确定实现的某些行为,来确定需要实现的某些策略。比如
std::enable_shared_from_this
或基于 boost.intrusive
的 list_base_hook
以及 intrusive_ref_counter
。