簡體   English   中英

不同結構的列表(向量)

[英]List (vector) of different structs

是否可能有某種不同結構的列表/數組/向量?

例如在MFCCObjectCArray但沒有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::anyboost::variant類型的橡皮擦:

std::vector< boost::variant<int, std::string> > vec;
vec.push_back( 21 );
vec.push_back( "hello " );

您所舉的例子很危險。 您如何清理(即delete )分配的內容? 它的類型已通過分配給void *而被擦除,那么編譯器如何知道要operator delete

您可以至少通過兩種不同的方式安全地進行此操作:

  • 所有對象都可以從具有virtual析構函數的通用庫中繼承。 然后,您可以將std::unique_ptrstd::vector設為通用基數。 這具有可擴展的優點(您可以聲明從公共庫派生的新類型,然后將它們扔到容器中而無需修改容器),但缺點是需要轉到免費存儲區(為存儲區分配內存)。 std::unique_ptr指向)。
  • 您可以使用boost::variant類的變量類型。 這不需要通用的基礎,也不需要在免費存儲區上進行分配,但是需要聲明容器時聲明所有可以存儲在容器中的類型(即,它不像基於繼承那樣容易擴展)解)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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