C 中的異構容器
在STL 容器分類中,有些要求仍未滿足,即可變大小和異構(不同類型的數據) 。詢問 C 是否為這種用例提供任何解決方案是合理的。
通常,C 容器被設計為保存單一類型的對象,但您可以使用指針或boost::any 來容納不同類型:
使用指針:
您可以儲存指向基本類型的指標容器,允許您儲存從該類型派生的物件:
<code class="cpp">std::vector<MyBaseType*>;</code>
使用boost::any:
Boost 提供了boost::any,它允許你安全地儲存任何類型的物件:
<code class="cpp">using boost::any_cast; typedef std::list<boost::any> many;</code>
然後你可以使用any_cast 將物件轉換為所需的類型。
使用boost::variant:
Boost::variant 是另一個選項,讓您可以指定一組允許的類型types:
<code class="cpp">std::vector<boost::variant<unsigned, std::string>>;</code>
但是,需要注意的是,與標準STL 容器相比,boost::any 和boost::variant 有一些效能和記憶體開銷。
以上是C容器可以儲存不同類型的資料嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!