CppCoreGuidelines C.136 用多重继承表达属性实现的集合
21 December 2022
C.136: Use multiple inheritance to represent the union of implementation attributes
理由
某些形式的混合类有状态,并且基于这些状态操作运行。如果这些操作是虚的,则需要使用继承。如果不是虚的,则使用继承能够避免样板代码和转发。
例子
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
。