首頁  >  文章  >  後端開發  >  如何在 C 容器中儲存異質物件:boost::any 或自訂實作?

如何在 C 容器中儲存異質物件:boost::any 或自訂實作?

Linda Hamilton
Linda Hamilton原創
2024-10-27 02:00:30750瀏覽

 How to Store Heterogeneous Objects in C   Containers: boost::any or Custom Implementation?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn