所以我有不同的IsIntersecting()
函数,每个函数采用不同的碰撞器组合;例如。:
bool IsIntersecting(CircleCollider& coll1, CircleCollider& coll2)
{
//blah
}
bool IsIntersecting(BoxCollider& coll1, CircleCollider& coll2)
{
//more blah
}
其中
BoxCollider
和CircleCollider
都从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文章上,他们还提到了其他替代方法,例如使用访客模式或指针方法查找表。
或者,也许是一个更好的主意:重新设计代码以避免此类复杂性。