c++ - std::queue 具有不同的容器类型,具体取决于运行时数据

标签 c++ boost stl

我有一个类需要使用 std::queue 作为实例变量来存储一些数据。我的问题是 std::queue 默认使用 std::deque 作为容器类型,或者需要在编译时提供另一种容器类型。但是我想使用哪个容器取决于类用户的一些运行时数据,因此我无法在编译时指定它。在实例化 std::queue 并提供适当的容器实现后,我不再关心容器本身,而只使用 std::queue 的接口(interface)。

我想提供的容器是 std::deque 或 boost::circular_buffer 并且都存储相同类型的元素,只是当调用者想要存储无限量的数据和循环 _buffer 时使用一个如果没有。

到目前为止,我发现的唯一方法是使用自定义抽象基类作为公共(public)接口(interface),为不同的 std::queue 实例提供两个派生实现。但在那种情况下,我必须复制 std::queue 的接口(interface),这真的很烦人。

有没有办法以这种方式声明和实例化 std::queue?类似于“std::queue with unknown/runtime provided container”。

最佳答案

模板参数必须在编译类型时已知。您将无法在运行时更改 queue 的底层容器。您可以做的是某种包装器或 union ,将两种类型的队列组合在一起,然后在运行时根据运行时条件使用其中一种。

关于c++ - std::queue 具有不同的容器类型,具体取决于运行时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230274/

相关文章:

c++ - 在多个项目中使用单个源文件的 Intellisense

c++ - std::vector 是否将其值类型的赋值运算符用于 push_back 元素?

c++ - enable_if 迭代器作为默认模板参数?

c++ - 用 vector 的 vector 描述一个很长的矩阵,哪个维度应该是最大的?

c++ - 将文件读入 vector ,我的输入函数有什么问题?

c++ - boost 单元解析字符串流

c++ - boost any library 的典型用法是什么?

c++ - C++ 的 XML 数据绑定(bind)类似于 Java 的 JAXB

C++:难以掌握 std::next_permutation 和 std::prev_permutation 的工作

c++ - 如何更新一组 std::pair 中的成员?