我正試圖將多種類型推入相同的std::vector
。例如,讓我們說我想推class type1
和class type2
成一個向量。使用struct來推送std :: vector中的多個類型有什麼問題?
所以基本上我也能夠做到:
vec.push_back(new type1, new type2);
vec.push_back(new type1, new type2);
我心目中是使他們的父類類型繼承(但我沒有這樣做同一類型的Type1和Type2奢侈品現在)。因此我使用struct
。所以我所做的就是
struct type{
type1* t1;
type2* t2;
};
std::vector<type> vec;
vec.push_back({new type1, new type2});
你覺得使用struct來,這是一個好主意,或者我應該使用this後是在暗示該技術?關於那篇文章,我的另一個問題是爲什麼使這個複雜,而不是像我這樣使用struct
?
編輯:另一種方法是使用也std::vector<std::pair <type1, type2>>
但因爲我可能有3型也因此這仍然不會爲我工作。
編輯的type1
和type2
,我說的是point
和triangle
。
編輯回答Martin在評論部分:我現在打算使用tuple with combining with enum
看到this更多細節。
由於您將同質類型的對象推入向量,它應該「有效」。但是,如果有更好的方法,很大程度上取決於個案的情況。你能否提供一些關於這個場景的更多信息,關於那些打包到那個結構中的兩個不同對象究竟是什麼? –
*我想到的是通過使它們從父類類型繼承來使類型1和類型2相同(但現在我沒有這種奢侈)。如果我們忽略了一些選項,尤其是那些爲這種情況準確設置的基本選項(多態性),我們就不能談論一個*好的方法。 –
使用原始指針和'new'操作符會使程序可能遭受內存泄漏。對於像點和三角形這樣的簡單對象,最好是按值存儲對象(例如,std :: vector,其中shape是可以表示點或三角形的對象),但是如果您絕對必須動態分配對象,然後至少用std :: unique_ptr或std :: shared_ptr來保存它們,這樣你就不會泄漏它們。 –