我有两个类,障碍和boid,boid继承自障碍。
现在我想写一些可以处理这两个类的对象的函数,这样传递vector<boid>
和vector<obstacle>
一样有效。
当我像这样进行类型转换并尝试访问向量的大小时,我得到的数字是1840700394而不是60:
vector<boid>* boids; ....
cout << ((vector<obstacle>*)boids)->size() << endl;
我也试过“reinterpret_cast”,但同样的问题。
答案 0 :(得分:7)
C ++模板与C#和Java泛型不同。模板实例化是一个完整的类,并且不以任何方式与其他模板实例化相关。一个人不能在他们之间施放。
(旁注:如果您使用的是static_cast
,那么它会为您抓住这个......)
答案 1 :(得分:3)
您不能将矢量转换为不同类型的矢量。如果您需要一个适用于两种类型对象的通用函数,则可以使用函数模板。
template <typename T>
void func(const std::vector<T>& vec)
{
....
}
此函数将接受包含任何类型对象的向量。
另见Roger Pate的评论如下。你可以让函数接受任何类型的容器(或任何实现适当语义的对象),只需说:
template <typename T>
void func(const T& container) { ... }
答案 2 :(得分:3)
解决此类问题的一种简单方法是使用std::vector<obstacle *>
。然后,您可以使用指向任何继承自障碍物的对象来填充矢量。