C 中的异构容器
您引用的图形说明了基于固定/可变大小、数据类型、排序等特征的各种 STL 容器和访问类型。然而,它缺少一个同时支持可变大小和异构性(容纳不同数据类型)的容器。
在 C 中,大多数容器被设计为使用模板来保存特定类型的对象。虽然指针可以允许异构存储,但它们也有局限性。此外,void* 容器的类型安全性较差。
对于可以存储不相关类型的真正异构容器,请考虑以下选项:
Boost.Any :
Boost.Any 提供了一种存储任何类型的通用方法,允许您创建包含整数、字符串甚至更复杂对象的容器。
<code class="cpp">using boost::any; std::list<boost::any> values; values.push_back(42); values.push_back("Hello, world!");</code>
Boost.Variant:
Boost.Variant 与 Boost.Any 类似,但需要在编译时指定允许的类型。这增强了类型安全性,同时仍然启用异构存储。
<code class="cpp">using boost::variant; std::vector<boost::variant<int, std::string>> vec; vec.push_back(44); vec.push_back("C++");</code>
这些库允许创建可以灵活存储和访问各种类型数据的容器。虽然 STL 没有直接提供,但这些替代方案为 C 中的异构数据存储提供了解决方案。
以上是如何用 C 语言创建异构容器?的详细内容。更多信息请关注PHP中文网其他相关文章!