[英]List (vector) of different structs
是否可能有某種不同結構的列表/數組/向量?
例如在MFC
有CObject
和CArray
但沒有MFC:
我可以做些類似的事情
std::vector<void*> pVec;
{
MYSTRUCT m = new MYSTRUCT;
pArr.push_back(m);
// looks fine here
}
//what is in my vector now?
有什么可以應付的嗎?
明顯的首選方法是讓std::vector<Base*>
處理多態類型。
如果確實確實存在完全不相關的類型(看起來確實如此),那么您可能正在尋找boost::any
或boost::variant
類型的橡皮擦:
std::vector< boost::variant<int, std::string> > vec;
vec.push_back( 21 );
vec.push_back( "hello " );
您所舉的例子很危險。 您如何清理(即delete
)分配的內容? 它的類型已通過分配給void *
而被擦除,那么編譯器如何知道要operator delete
?
您可以至少通過兩種不同的方式安全地進行此操作:
virtual
析構函數的通用庫中繼承。 然后,您可以將std::unique_ptr
的std::vector
設為通用基數。 這具有可擴展的優點(您可以聲明從公共庫派生的新類型,然后將它們扔到容器中而無需修改容器),但缺點是需要轉到免費存儲區(為存儲區分配內存)。 std::unique_ptr
指向)。 boost::variant
類的變量類型。 這不需要通用的基礎,也不需要在免費存儲區上進行分配,但是需要聲明容器時聲明所有可以存儲在容器中的類型(即,它不像基於繼承那樣容易擴展)解)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.