我有一些函数重载,每个都需要不同的子类;如何检查给定对象使用哪个函数?

时间:2015-12-12 10:54:25

标签: c++

所以我有不同的IsIntersecting()函数,每个函数都采用不同的碰撞器组合; e.g:

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

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

其中BoxColliderCircleCollider均来自Collider。假设我有一个游戏对象,它有一个成员变量:

Collider _collider;

如何确保为该对撞机调用正确的交叉函数;即如果对撞机属于该类型等,则调用涉及BoxCollider的函数

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为你要找的是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
  }
}

在维基文章中,他们还提到了其他替代方案,例如使用访问者模式或指针到方法查找表。

或者更好的想法:重新设计代码以避免此类并发症。