C++要在其中添加接口功能的类层次结构

C++ class hierarchy in which to add functionality with an interface

本文关键字:层次结构 功能 接口 在其中 添加 C++      更新时间:2023-10-16

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动态类型执行交叉投射,因此它可能处于缓慢的一面。