C++要在其中添加接口功能的类层次结构
C++ class hierarchy in which to add functionality with an interface
C++.想象一下以下情况。
有一个派生自某个基类 A 的类层次结构。 我们不能修改 A,因为它超出了我们的范围。 (由库提供,它是一个 MFC CView 类,但这在这里无关紧要)
所以有 A1、A2 等,它们是以某种方式从 A 派生的不同类并提供特定的功能。
现在假设我们定义了一些新接口 I 来提供一些新功能。
应用程序的具体对象的类将从 As 和 I 之一继承。 (又有几个,比如B1派生自A1和I,B2派生自A2和I等。
现在碰巧要实现 I 的接口,有很多常见的代码需要 A 的功能。 我们如何在不重复太多的情况下组织阶级层次结构。
例如,如果有一个函数 I::f 需要调用 A::f,则对于所有派生类 Bn。 为每个 Bn 重新实施 I::f 似乎是浪费。 但显然,我们不能直接从 I::f 调用 A::f,因为它们不相关。
我希望你明白这一点。
有什么模式可以帮助我们?
"从I::f
调用A::f
而不彻底检查所有内容"的直接解决方案将是dynamic_cast
:
struct I {
void f() {
dynamic_cast<A *>(this)->f();
}
};
请注意,这将执行成熟的 RTTI 图形遍历,以通过对象的未知Ax
动态类型执行交叉投射,因此它可能处于缓慢的一面。
相关文章:
- 如何重构类层次结构以避免菱形问题
- C++ 中模板化类型的类层次结构
- 为什么不同类型层次结构的指针之间的dynamic_cast定义得很好?
- 继承层次结构并将元素添加到向量
- C++ 类层次结构中的"对齐"是什么意思?
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 类层次结构中的运算符重载
- 如何在层次结构中实现运算符使用?
- 反向层次结构中的可变参数模板参数
- 如何在继承层次结构中调用具有默认参数的构造函数?
- C++ 提升 - 包含类层次结构对象的类的序列化
- 在C++继承层次结构时提取实现者
- 在C++中将类实例添加到对象层次结构中的问题
- 确定大层次结构中基本指针的实际类型,无需dynamic_cast
- 在继承层次结构中复制和移动
- 模板冲突的类型-但类型应该是相同的cfr类层次结构
- C++要在其中添加接口功能的类层次结构
- 有关继承层次结构的问题,没有任何虚拟功能
- 当类层次结构中只有一个类时,请避免在每个功能呼叫上读取V-Table的开销
- 如何实现具有注入功能的结构的一般层次结构