处理派生类的细节而不进行向下转换

时间:2014-04-01 04:24:48

标签: c++ oop downcast

假设我有两种不同类型的碰撞器,圆圈和盒子,它们来自同一个基础对撞机类。我有一个实体类,其中包含一个指向对撞机的指针,该对撞机可以是圆形对撞机或箱式对撞机。

class Collider {};

class CircleCollider : public Collider
{
    // Defines a circle
};
class BoxCollider : public Collider
{
    // Defines a rectangle
};

class Entity
{
    Collider* collider;
};

我想创建一个碰撞处理程序,我可以传递一堆实体并让它弄清楚如何解决它们的碰撞,但为了做到这一点,处理程序需要知道它正在处理什么类型的碰撞器。 / p>

当这个问题陷入困境时,唯一的解决方案似乎是向下倾斜,但我想知道我是否只是以错误的方式接近它。这似乎是一种常见的情况,但我无法找到解决方案,这使我怀疑是否有其他方法我没有看到,或者这是一个只需要使用向下转换的情况。

由于碰撞处理特定于不同的对撞机对,我似乎不能在这里使用访客模式或者我错了吗?

1 个答案:

答案 0 :(得分:1)

如果你将一个虚拟方法collidesWith(Collider c)添加到Collider类,并在BoxCollider和CircleCollider中添加了特定的实现,这将解决这些特定实例是否发生冲突,外部冲突处理程序永远不会需要向下转换甚至知道它正在使用什么类型的对撞机。