0

我的问题是关于编程技术,或者,也许是设计模式。假设从 base 派生的几个类包含一个纯虚方法,该方法应该在它们之间进行一些交互。

例如,RectangleEllipseTriangle-Line都派生自 a Shape。而这个抽象类,,,Shape包含virtual bool Intersects(Shape* another) = 0

看来,我需要进行六个实现,对(顺便说一句,在这个特定示例中有更好的解决方案吗?)。

目前我不知道任何其他示例。

也许我在谈论一个众所周知的东西,我几乎可以肯定有一些名称描述了这种技术。但是,我什至不知道要输入什么才能在 Internet 上找到它。

好吧,你能告诉我如何实现这样的事情(我仍然想知道是否需要任何辅助方法,或者,也许,RTII's dynamic_cast?)或指出一些关于它的资源(艺术、教程或其他)?

4

2 回答 2

5

这是双分派的教科书示例,维基百科文章很好地描述了问题和解决方案:

http://en.wikipedia.org/wiki/Double_dispatch

如果我没记错的话,Andrei Alexandescu 的《现代 C++ 设计》一书中有一个非常优雅的解决方案

http://www.amazon.com/Modern-Design-Generic-Programming-Patterns/dp/0201704315

于 2011-08-22T17:17:50.477 回答
1

一个简单的事实是您错误地使用了继承。你应该有一个表示由一系列顶点组成的所有形状的 VertexShape 和一个表示由数学公式描述的所有形状的 FormulaShape,而不是 Line、Box、Triangle 类型的继承。

继承不应该用于建模可以通过简单地改变必须存在于类中的数据来建模的关系,例如,用于构建多边形的顶点。

编辑:不,不,不。使用模板。如果您绝望,请专攻它。这就是它的用途。提供零开销的通用算法。伙计们,我们在 90 年代发现了这些东西。

于 2011-08-22T17:25:34.113 回答