”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 C++ 容器中存储异构对象:boost::any 或自定义实现?

如何在 C++ 容器中存储异构对象:boost::any 或自定义实现?

发布于2024-11-08
浏览:816

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

在 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