odi*_*erd 16 c++ allocator c++11
为了保存一些代码,我可以说我有一个名为的自定义分配器MyAlloc
,我已成功使用std::vector<int>
如下:
std::vector<int,MyAlloc<int>> vec;
Run Code Online (Sandbox Code Playgroud)
现在我想使用自定义分配器在std :: function中保存lambda,我该怎么做?
我失败的尝试:
int i[100];
std::function<void(int)> f(MyAlloc<void/*what to put here?*/>{},[i](int in){
//...
});
Run Code Online (Sandbox Code Playgroud)
更新: std :: function中的分配器已被删除
Com*_*sMS 17
根据标准,您需要提供标记类型作为第一个参数,以指示您要使用自定义分配器:
std::function<void(int)> f(std::allocator_arg, MyAlloc<char>{}, [i](int in){
//...
});
Run Code Online (Sandbox Code Playgroud)
正如@Casey和@Potatoswatter在评论中所指出的那样,赋予分配器的模板参数类型无关紧要,只要它是一个对象类型即可.所以char
这里很好.
更新C++ 17:事实证明,分配器支持std::function
有许多基本问题,导致它在C++中被弃用 17.如果您坚持使用它,请务必在执行此操作之前仔细检查您的实施.GCC的标准库从未实现过这些功能,但即使您的标准库具有这些功能,它也可能不会像您期望的那样运行.
归档时间: |
|
查看次数: |
4309 次 |
最近记录: |