我有一个模板化接口,各种派生模板化类,与派生模板化类相关联的各种函数,以及一个std容器,据说包含指向模板化接口实例的指针:
class Collider<T> {}
class BoxCollider<T> : public Collider<T> {}
class CircleCollider<T> : public Collider<T> {}
bool intersects(BoxCollider<T> b1, BoxCollider<U> b2) { ... }
bool intersects(BoxCollider<T> b, CircleCollider<U> c) { ... }
bool intersects(CircleCollider<T> b, BoxCollider<U> c) { ... }
bool intersects(CircleCollider<T> c1, CircleCollider<U> c2) { ... }
我想做这样的事情:
int main() {
std::vector<std::shared_ptr<Collider<float>>> colliders;
CircleCollider<float> player(...);
...
for(auto it = colliders.begin(); it != colliders.end(); it++) {
auto collider = *it;
if(intersects(player, *collider) {
// Do something
}
}
}
但我无法理解为什么(明显的类型!=真实的类型......),我尝试了很多其他方法来做我需要的东西(比如动态铸造指针)但我仍然可以&# 39;做我需要的......请有人告诉我最好的方法是什么?
非常感谢=)