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

jac*_*row 3 c++ containers templates

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

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

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

    // SOME OTHER MEMBERS
}
Run Code Online (Sandbox Code Playgroud)

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

是否可以?或者是否有任何其他解决方案不涉及我创建另一个与此完全相同的类,但使用 astack而不是 a queue

Nat*_*ica 5

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

template<class T, class Container = std::deque<T>> 
class queue
{
    //...
};
Run Code Online (Sandbox Code Playgroud)

但这样做需要你使用类似的东西

std::queue<int, std::vector<int>> foo;
Run Code Online (Sandbox Code Playgroud)

如果你想换容器。如果您不想指定容器的模板类型,那么您可以使用模板模板,例如

template<class T, template<typename...> class Container = std::queue> 
class Myclass
{
    Container<T> cont;
};
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它

Myclass<int, std::set> foo;
Run Code Online (Sandbox Code Playgroud)

将其更改为使用 astd::set而不是默认的std::queue.