具有容器变量类型的类模板

Class template with variable type of container

本文关键字:类型 变量      更新时间:2023-10-16

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

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

template<class T>
class Myclass {
    std::queue<T> queue;
    // SOME OTHER MEMBERS
}

但是我希望能够在需要时使该std::queue对象成为其他类型的容器,例如std:stack,以便能够处理具有FIFO以外的其他类型的策略的容器。

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

当然可以。 这称为容器适配器。 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