簡體   English   中英

排印矢量 <object> 在C ++中?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM