具有可变类型容器

时间:2017-06-15 16:37:19

标签: c++ templates containers

我想知道是否可以创建一个类模板,其中的对象必须是容器,但必须是用户指定的类型。

例如,现在我有一个这样的类:

template<class T>
class Myclass {
    std::queue<T> queue;

    // SOME OTHER MEMBERS
}

但是我希望能够在需要时将std::queue对象设置为其他类型的容器,例如std:stack,以便能够处理其他类型的其他策略的容器比FIFO。

有可能吗?或者是否有任何其他解决方案不涉及我创建另一个类,但使用stack而不是queue

1 个答案:

答案 0 :(得分:4)

当然可以。这称为容器适配器。 std::queue本身就是一个容器适配器,看起来像

template<class T, class Container = std::deque<T>> 
class queue
{
    //...
};

这样做虽然要求你使用

之类的东西
std::queue<int, std::vector<int>> foo;

如果要更改容器。如果您不想指定容器的模板类型,则可以使用模板模板,如

template<class T, template<typename...> class Container = std::queue> 
class Myclass
{
    Container<T> cont;
};

你可以像

一样使用它
Myclass<int, std::set> foo;

要将其更改为使用std::set而非默认std::queue