c++ - 自定义分配器兼容性

标签 c++ c++11 templates vector allocator

给定以下函数签名

void foo(std::vector<int> &bar);

和自定义分配器 CustomAlloc , 用 std::vector<int, CustomAlloc> 的实例调用 foo结果在

could not convert ‘bar’ from ‘std::vector<int, CustomAlloc<int, [...] >}’ to ‘std::vector<int>’

我不是 C++ 模板大师,如果我错了请纠正我,但我的理解是 std::vector<int>默认为 std::vector<int, std::allocator<int> > (gcc 7.1.1.-3) 因此定义了一个完全无关的类型。


这个蜜蜂说我正在尝试找到一些解决方案来制作 foo可使用 std::vector<int, CustomAlloc> 调用并附带以下内容。

template<typename Allocator>
void foo(std::vector<int, Allocator> &bar);

我不喜欢分配器规范传播模板的方式,但我想这就是 STL 的工作方式。

所以我的问题是,鉴于foo,你将如何解决这个问题?具体操作 int

PS:对不起,我找不到好的标题了

最佳答案

标准中有一个全新的命名空间来解决这个问题——namespace pmr。参见 polymorphic_allocator: when and why should I use it?

关于在没有 pmr 解决方案的情况下,您可以做些什么来避免模板传播此问题。答案是你不能,你需要硬指定分配器参数,或者你需要模板化 vector 以接受任何类型的分配器。

关于c++ - 自定义分配器兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44844770/

相关文章:

c++ - 如何使用非默认构造函数实例化模板类

c++ - 删除 C++ 模板类中的性能警告

c++ - 带有 GNU STL 的 GCC 4.8 为 std::string 构造函数生成错误代码?

c++ - 如何编写递归下降解析器?

c++ - Eclipse 无法从由类指针构成的 vector 中解析方法 (C++)

C++ ofstream 无法从变量名打开文件(即使在使用 c_str() 之后)

python - Django HTTP 500 错误

c++ - 是否可以根据类型是整数类型还是浮点类型来重载模板函数?

c++ - 如果同一个静态成员变量具有不同的值会发生什么

c++ - 什么时候使用结构比在 C++ 中使用类更合理?