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

标签 c++ templates stl

我想创建一个具有两个模板参数的模板类。首先 - N 是一类变量,默认设置为 int第二个容器是来自 stl 的容器默认设置为 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相当于 foo<int, std::vector>声明。

我的类定义问题出在哪里?

最佳答案

使用 C++14 或之前版本,您需要编写 foo<>为了实例化模板。

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

关于c++ - 如何将 std::vector 设置为模板的默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53831271/

相关文章:

c++ - 为什么在 C++ 中添加 virtual 关键字后此指针值发生变化

c++ - OpenCV 随机森林 CvRTrees 错误

c++ - 如何从 STL 容器实例中获取元素类型?

c++ - Qt Q_Property 给出编译时错误

c++ - 在这种情况下我必须删除内存吗?

c++ - 使用带有模板成员函数的指令

c++ - 为什么 libstdc++ 为迭代器上的二元运算符实现 <L,R> 和 <LR> 重载?

c++ - 如何获取指向原始数据的 std::vector 指针?

php - CodeIgniter 查询结果仅在 View 中显示最后一行

javascript - Ember 链接不渲染模板