[英]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.