[英]Typcasting vector<object> in C++?
我有两个类,障碍和博伊德,博伊德从障碍继承。
现在,我想编写一些可以与两个类的对象一起使用的函数,以便传递vector<boid>
和vector<obstacle>
。
当我像这样打字时,尝试访问向量的大小时,我得到的数字是1840700394,而不是60:
vector<boid>* boids; ....
cout << ((vector<obstacle>*)boids)->size() << endl;
我也尝试过“ reinterpret_cast”,但是同样的问题。
C ++模板与C#和Java泛型不同。 模板实例化是一个完整的类,并且与任何其他模板实例化都没有任何关系。 一个人不能在他们之间投掷。
(侧面注意:如果您使用的是static_cast
,它将为您抓到这个...。)
您不能将向量转换为其他类型的向量。 如果您需要可同时使用两种对象的通用函数,则可以使用函数模板。
template <typename T>
void func(const std::vector<T>& vec)
{
....
}
此函数将接受包含任何类型的对象的向量。
另外,请参阅下面的Roger Pate的评论。 您可以通过以下方式让函数接受任何类型的容器(或实现适当语义的任何对象):
template <typename T>
void func(const T& container) { ... }
解决此类问题的一种简单方法是使用std::vector<obstacle *>
。 然后,您可以使用指向从障碍继承的任何对象的指针填充向量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.