所以我有不同的IsIntersecting()
函数,每个函数都采用不同的碰撞器组合; e.g:
bool IsIntersecting(CircleCollider& coll1, CircleCollider& coll2)
{
//blah
}
bool IsIntersecting(BoxCollider& coll1, CircleCollider& coll2)
{
//more blah
}
其中BoxCollider
和CircleCollider
均来自Collider
。假设我有一个游戏对象,它有一个成员变量:
Collider _collider;
如何确保为该对撞机调用正确的交叉函数;即如果对撞机属于该类型等,则调用涉及BoxCollider
的函数
感谢您的帮助。
答案 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
}
}
在维基文章中,他们还提到了其他替代方案,例如使用访问者模式或指针到方法查找表。
或者更好的想法:重新设计代码以避免此类并发症。