C 中的异构容器
在 STL 容器分类中,有些要求仍未满足,即可变大小和异构(不同类型的数据) 。询问 C 是否为这种用例提供任何解决方案是合理的。
通常,C 容器被设计为保存单一类型的对象,但您可以使用指针或 boost::any 来容纳不同类型:
使用指针:
您可以存储指向基本类型的指针容器,允许您保存从该类型派生的对象:
<code class="cpp">std::vector<MyBaseType*>;</code>
使用 boost::any:
Boost 提供了 boost::any,它允许你安全地存储任何类型的对象:
<code class="cpp">using boost::any_cast; typedef std::list<boost::any> many;</code>
然后你可以使用any_cast 将对象转换为所需的类型。
使用 boost::variant:
Boost::variant 是另一个选项,允许您指定一组允许的类型types:
<code class="cpp">std::vector<boost::variant<unsigned, std::string>>;</code>
但是,需要注意的是,与标准 STL 容器相比,boost::any 和 boost::variant 有一些性能和内存开销。
以上是C容器可以存储不同类型的数据吗?的详细内容。更多信息请关注PHP中文网其他相关文章!