给定以下函数签名
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/