"Multiplicity of implementation" - 如何处理它?这种东西的"名称"是什么?

"Multiplicity of implementation" - how to deal with it? And what's the 'name' of such thing?

本文关键字:是什么 名称 处理 implementation of Multiplicity 何处理      更新时间:2023-10-16

我的问题有点关于编程技术,或者可能是设计模式。假设有几个类派生自包含纯虚方法的base,该类之间应该进行一些交互。

例如,Rectangle, Ellipse, TriangleLine -都是由一个Shape衍生而来。这个抽象类Shape包含virtual bool Intersects(Shape* another) = 0

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

目前我想不出其他的例子。

也许我说的是一件众所周知的事情,我几乎可以肯定有一些名字描述了这种技术。然而,我甚至不知道该在网上输入什么才能找到它。

好吧,你能告诉我如何实现这样的事情(我仍然想知道是否需要任何辅助方法,或者,也许,RTIIdynamic_cast ?)或点一些来源(艺术,教程或其他)?

这是学校课本双重分发的例子,维基百科的文章很好地描述了问题和解决方案:

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

如果我没记错的话,在Andrei Alexandescu的《Modern c++ Design》一书中有一个非常优雅的解决方案

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

一个简单的事实是,您错误地使用了继承。你应该有一个代表所有由一系列顶点组成的形状的VertexShape,和一个代表所有由数学公式描述的形状的FormulaShape,而不是像线条、方框、三角形那样的继承。

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

编辑:不,不,不。使用模板。如果你走投无路,就专攻它。这就是它的作用。提供零开销的通用算法。伙计们,我们在90年代发现了这个东西。