我想制作一个具有两个模板参数的模板类。第一个- 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
声明。
我的班级定义哪里有问题?
答案 0 :(得分:5)
在C ++ 14或更低版本中,您需要编写foo<>
才能实例化模板。
从C ++ 17开始,由于类模板参数的推导,它实际上就像您编写的那样工作。如果编译器支持,则可以考虑使用-std=c++17
更新C ++语言版本。