在C 容器中儲存異質物件
C 容器通常需要同質元素,這意味著它們只能保存單一類型的對象。但是,在某些情況下,您可能需要一個可以容納混合資料類型的容器。本文探討如何使用 boost::any 函式庫和自訂方法來實現此目的。
使用 boost::any
boost::any 是一個模板類別可以容納任何 C 型別。透過將 boost::any 的實例儲存在容器中,您可以擁有異質的物件集合。建議使用此方法,因為其穩健性和對邊緣情況的處理。
自訂實作
如果您喜歡手動方法,您可以建立自訂結構或聯合,將所有預期類型的成員與指定活動類型的指示符結合起來。
結構方法:
struct HeterogeneousContainer {
int i;
std::string s;
double d;
int type; // 0 for int, 1 for string, 2 for double
};
聯合方法(謹慎使用):
union HeterogeneousContainer {
int i;
std::string s;
double d;
};
但是,這種方法有限制和潛在的陷阱,例如:
結論
當需要在C容器中儲存異質物件時,考慮使用boost::any庫,因為它的安全性和有效性。如果需要,可以使用結構或聯合創建自訂實現,但請注意它們的限制。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3