gpt4 book ai didi

c++ - 在不向下转换的情况下处理派生类的细节

转载 作者:行者123 更新时间:2023-11-28 06:59:01 26 4
gpt4 key购买 nike

假设我有两种不同类型的碰撞器,圆形和盒子,它们派生自相同的基本碰撞器类。我有一个实体类,其中包含一个指向碰撞器的指针,该碰撞器可以是圆形碰撞器或盒子碰撞器。

class Collider {};

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

class Entity
{
Collider* collider;
};

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

当问题像这样被框定时,唯一的解决方案似乎是沮丧的,但我想知道我是否只是以错误的方式接近它。这似乎是一种常见的情况,但我无法找到解决方案,这让我怀疑是否存在其他我没有看到的方法,或者这是一个只需要使用向下转换的情况。

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

最佳答案

如果你在 Collider 类中添加了一个虚方法 collidesWith(Collider c) ,并在 BoxCollider 和 CircleCollider 中添加了特定的实现,它会判断这些特定实例是否发生了碰撞,那么外部碰撞处理程序将永远不必向下转换甚至知道它使用的是哪种特定类型的对撞机。

关于c++ - 在不向下转换的情况下处理派生类的细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22776767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com