在C ++?</object>中转换类型向量<object>

时间:2010-10-30 13:35:48

标签: c++ inheritance casting

我有两个类,障碍和boid,boid继承自障碍。

现在我想写一些可以处理这两个类的对象的函数,这样传递vector<boid>vector<obstacle>一样有效。

当我像这样进行类型转换并尝试访问向量的大小时,我得到的数字是1840700394而不是60:

vector<boid>* boids; ....
cout << ((vector<obstacle>*)boids)->size() << endl;

我也试过“reinterpret_cast”,但同样的问题。

3 个答案:

答案 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 *>。然后,您可以使用指向任何继承自障碍物的对象来填充矢量。