1

让我从一个具体的例子开始。在 C++ 中,我在抽象基类下有一个类层次结构CollisionVolume。任何碰撞体积都需要能够detectCollision与任何其他体积。这个碰撞代码是专门基于存在的两个子类的,但它是可交换的:detectCollision(a, b) == detectCollision(b, a).

我需要使用类似于虚函数的机制,因为对象通常属于抽象基类。但是,如果我使用典型的虚方法,则选择的函数只能取决于操作数之一的类型,而不是两者。我能够做到这一点的唯一方法是使用 RTTI 或类似 RTTI 的机制。

有没有更清洁的方法来做到这一点?

4

3 回答 3

2

您正在寻找多个 dispatch。C++ 没有它,因为它很难有效地实现。大多数其他静态类型/面向效率的语言也没有。您的 RTTI 解决方案可能是伪造它的最佳方式。

于 2010-02-04T00:04:03.097 回答
1

有几种解决方案可以在 C++ 中模拟多方法。

这里有一些可以帮助您解决问题的参考资料:

S.Meyers “更有效的 C++ ”,第 31 条:使函数对于多个对象是虚拟的。

A.Alexandrescu “现代 C++ 设计”,第 11 章。多方法

C++ 中的多方法: Daniel Shopyrin找到完整的解决方案

多发。Carlo Pescio 博士使用模板和 RTTI 的新方法,C++ 报告,1998 年 6 月。

向 C++ 添加多方法的提案草案,此处此处

于 2010-02-04T08:29:03.670 回答
0

我最初的想法,在阅读时似乎是访问者模式(?),是创建一个返回有关对象的一些重要信息的虚拟函数,然后detectCollision()比较两个对象返回的重要信息。这样,每个对象都可以返回专门的信息,但可以以通用的方式进行比较。

这可能不是最有效的方法,但似乎相对简单。

于 2010-02-04T08:38:10.167 回答