在C 容器中儲存異質物件
C 容器通常需要同構元素,這意味著它們只能保存單一類型的對象。但是,在某些情況下,您可能需要一個可以容納混合資料類型的容器。本文探討如何使用 boost::any 函式庫和自訂方法來實現此目的。
使用 boost::any
boost::any 是一個模板類別可以容納任何 C 類型。透過將 boost::any 的實例儲存在容器中,您可以擁有異質的物件集合。建議採用這種方法,因為它具有穩健性和對邊緣情況的處理能力。
自訂實作
如果您喜歡更手動的方法,您可以建立自訂結構或聯合,將所有預期類型的成員與指示符結合起來以指定活動類型。
結構方法:
<code class="cpp">struct HeterogeneousContainer { int i; std::string s; double d; int type; // 0 for int, 1 for string, 2 for double };</code>
聯合方法(謹慎使用) :
<code class="cpp">union HeterogeneousContainer { int i; std::string s; double d; };</code>
但是,這種方法有限制和潛在的陷阱,例如:
結論
當需要在C 容器中儲存異質物件時,請考慮使用boost::any 函式庫,因為它的安全性和有效性。如果需要,可以使用結構或聯合創建自訂實現,但請注意它們的局限性。
以上是如何在 C 容器中儲存異質物件:boost::any 或自訂實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!