所以我有不同的IsIntersecting()函数,每个函数采用不同的碰撞器组合;例如。:

bool IsIntersecting(CircleCollider& coll1, CircleCollider& coll2)
{
    //blah
}

bool IsIntersecting(BoxCollider& coll1, CircleCollider& coll2)
{
    //more blah
}


其中BoxColliderCircleCollider都从Collider派生。假设我有一个游戏对象,该对象具有一个成员变量:

Collider _collider;


我如何确保为该对撞机调用正确的交点函数;即如果碰撞器属于该类型,则调用包含BoxCollider的函数,依此类推。

谢谢你的帮助。

最佳答案

我认为您正在寻找的是multiple dispatch
不幸的是,C ++不提供多个调度(仅单个调度),它是discussed

您可以找到将dynamic_cast与类似的方法结合使用:

bool IsIntersecting(Collider& coll1, CircleCollider& coll2) {
  if (CircleCollider* circle_collider = dynamic_cast<CircleCollider*>(&coll1)) {
    // do what you need 1
  else if (BoxCollider* box_collider = dynamic_cast<BoxCollider*>(&coll1)) {
   // do what you need 2
  }
}


在Wiki文章上,他们还提到了其他替代方法,例如使用访客模式或指针方法查找表。

或者,也许是一个更好的主意:重新设计代码以避免此类复杂性。

09-11 17:35