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