处理派生类的细节而不向下转换
Handling specifics of derived classes without downcasting
假设我有两种不同类型的碰撞体,圆形和盒子,它们来自同一个基本碰撞体类。我有一个实体类,其中包含指向碰撞器的指针,该碰撞器可以是圆形碰撞体或盒子碰撞体。
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++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 处理派生类的细节而不向下转换