如何将std :: vector设置为模板的默认参数?

时间:2018-12-18 10:43:17

标签: c++ templates stl

我想制作一个具有两个模板参数的模板类。第一个- N 是一类变量,默认设置为int,第二个 container 是来自stl的容器,默认设置为{{1 }}。

std::vector

当我创建没有模板参数的上述类的对象#include <iostream> #include <vector> template <class N=int, template <class T=N, class Allocator=std::allocator<N>> class container=std::vector> class foo{ container<N> cont; }; int main() { foo f; } 时,编译器将出现以下错误:

f

我希望In function 'int main()': 15:9: error: missing template arguments before 'f' 等同于foo声明。

我的班级定义哪里有问题?

1 个答案:

答案 0 :(得分:5)

在C ++ 14或更低版本中,您需要编写foo<>才能实例化模板。

从C ++ 17开始,由于类模板参数的推导,它实际上就像您编写的那样工作。如果编译器支持,则可以考虑使用-std=c++17更新C ++语言版本。