我正在创建一个Multistack类,应该使用以下任一方法调用:
Multistack<type>
或
Multistack<type, container>
e.g。
Multistack<int, vector>
以下是我的代码:
#include <vector>
#include <deque>
#include <list>
using namespace std;
template <typename T, template <typename> class Cont>
class Multistack {
public:
// Member functions
private:
Cont<T> _elems;
};
int main(int argc, char** argv){
Multistack<int, vector> ms;
return 0;
}
但是,我收到以下错误:
main9.cpp: In function ‘int main(int, char**)’:
main9.cpp:18:27: error: type/value mismatch at argument 2 in template parameter list for ‘template<class T, template<class> class Cont> class Multistack’
Multistack<int, vector> ms;
^
main9.cpp:18:27: note: expected a template of type ‘template<class> class Cont’, got ‘template<class _Tp, class _Alloc> class std::vector’
main9.cpp:18:29: warning: unused variable ‘ms’ [-Wunused-variable]
Multistack<int, vector> ms;
我发现了类似的问题,但似乎没有解决方案可以解决我的问题。
答案 0 :(得分:0)
std::vector
的声明是:
template<
class T,
class Allocator = std::allocator<T>
> class vector;
它与模板模板参数template<typename> class Cont
不匹配。
请改用以下内容:
template <typename T, template <typename...> class Cont>
class Multistack {
// ...
};
这将使您有机会使用std::vector
,std::list
和其他具有两个模板参数的人以及具有三个std::set
和std::priority_queue
的容器或更多模板参数。当然,也只接受只有一个模板参数的自定义容器。