C 中的異構容器
您引用的圖形說明了基於固定/可變大小、資料類型、排序等特徵的各種STL 容器和存取類型。然而,它缺少一個同時支援可變大小和異構性(容納不同資料類型)的容器。
在 C 中,大多數容器被設計為使用模板來保存特定類型的物件。雖然指標可以允許異質存儲,但它們也有限制。此外,void* 容器的類型安全性較差。
對於可以儲存不相關類型的真正異質容器,請考慮以下選項:
Boost.Any :
Boost.Any 提供了一種儲存任何類型的通用方法,可讓您建立包含整數、字串甚至更複雜物件的容器。
<code class="cpp">using boost::any; std::list<boost::any> values; values.push_back(42); values.push_back("Hello, world!");</code>
Boost.Variant:
Boost.Variant 與 Boost.Any 類似,但需要在編譯時指定允許的類型。這增強了類型安全性,同時仍啟用異質儲存。
<code class="cpp">using boost::variant; std::vector<boost::variant<int, std::string>> vec; vec.push_back(44); vec.push_back("C++");</code>
這些函式庫允許建立可以靈活儲存和存取各種類型資料的容器。雖然 STL 沒有直接提供,但這些替代方案為 C 中的異質資料儲存提供了解決方案。
以上是如何用 C 語言建立異質容器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!