我想知道是否可以创建一个类模板,其中的对象必须是容器,但必须是用户指定的类型。
例如,现在我有一个这样的类:
template<class T>
class Myclass {
std::queue<T> queue;
// SOME OTHER MEMBERS
}
但是我希望能够在需要时将std::queue
对象设置为其他类型的容器,例如std:stack
,以便能够处理其他类型的其他策略的容器比FIFO。
有可能吗?或者是否有任何其他解决方案不涉及我创建另一个类,但使用stack
而不是queue
?
答案 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
。