为了节省一些代码,假设我有一个名为 MyAlloc
的自定义分配器我已经成功地使用了 std::vector<int>
如下:
std::vector<int,MyAlloc<int>> vec;
现在我想使用自定义分配器在 std::function 中保存一个 lambda,我该怎么做?
我的失败尝试:
int i[100];
std::function<void(int)> f(MyAlloc<void/*what to put here?*/>{},[i](int in){
//...
});
更新: std::function 中的分配器为 deprecated
最佳答案
按照标准,你需要给一个tag type作为第一个参数表明您要使用自定义分配器:
std::function<void(int)> f(std::allocator_arg, MyAlloc<char>{}, [i](int in){
//...
});
正如 @Casey 所指出的那样和 @Potatoswatter在注释中,分配器的模板参数类型无关紧要,只要它是对象类型即可。所以 char
在这里很好。
C++17 更新:事实证明,对 std::function
的分配器支持存在许多基本问题,导致 being deprecated in C++17 .如果您仍然坚持使用它,请务必在这样做之前仔细检查您的实现。 GCC 的标准库从未实现过这些功能,但即使您的标准库实现了,它也可能不会像您期望的那样运行。
关于c++ - 如何使用自定义分配器创建 std::function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21094052/