在 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