gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:12 25 4
gpt4 key购买 nike

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

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

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

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

Collider _collider;

如何确保为该碰撞器调用正确的交集函数;即,如果碰撞器属于那种类型,则调用涉及 BoxCollider 的函数,等等。

感谢您的帮助。

最佳答案

我想你要找的是multiple dispatch .不幸的是,C++ 不提供多重分派(dispatch)(只有单分派(dispatch)),它是 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 文章中,他们还提到了其他替代方案,例如使用访问者模式或指向方法的查找表。

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

关于c++ - 我有几个函数重载,每个函数重载都有一个不同的子类;如何检查给定对象使用哪个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34239000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com