自定义分配器兼容性

Custom allocator compatibilty

给定以下函数签名

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。参见

关于如何避免在没有 pmr 解决方案的情况下使用模板传播此问题。答案是你不能,你需要硬指定分配器参数,或者你需要模板化向量以接受任何类型的分配器。