我想构建一个Stack
类,以便用户能够选择他想用于实现的容器Stack
.例如,List/Vector
.
部分代码:
stack.h
#ifndef STACK_H_
#define STACK_H_
template <typename T, template<typename T> class ContainerType>
class Stack{
ContainerType<T> container;
public:
Stack() : container(ContainerType<T>()){}
};
#endif /* STACK_H_ */
Run Code Online (Sandbox Code Playgroud)
TEST.CPP
#include "stack.h"
#include <vector>
int main(){
Stack<int, std::vector<int> > stack;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
好吧,它没有编译.我在网上得到了下一个错误:
Stack<int, std::vector<int> > stack;
Run Code Online (Sandbox Code Playgroud)
错误:
expected a class template, got `std::vector<int, std::allocator<int> >' test.cpp
invalid type in declaration before ';' token test.cpp
type/value mismatch at argument 2 in template parameter
list for …
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以创建一个类模板,其中的对象必须是容器,但属于用户指定的类型。
例如,现在我有一个这样的课程:
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
?