模板模板参数给出神秘的类型/值不匹配

时间:2017-05-13 18:23:26

标签: c++ templates template-templates

我正在创建一个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;

我发现了类似的问题,但似乎没有解决方案可以解决我的问题。

1 个答案:

答案 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::vectorstd::list和其他具有两个模板参数的人以及具有三个std::setstd::priority_queue的容器或更多模板参数。当然,也只接受只有一个模板参数的自定义容器。