有没有办法使这项工作有效?
#include <functional>
#include <memory>
int main()
{
std::function<unsigned char*(size_t)> allocator
= [](size_t size){
return new unsigned char[size];
};
std::function<void(unsigned char*)> deleter
= [](unsigned char* ptr){
delete[] ptr;
};
std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
return EXIT_SUCCESS;
}
我收到错误:
main.cpp: In function ‘int main()’:
main.cpp:15:49: error: ‘deleter’ is not a type
std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
^~~~~~~
main.cpp:15:57: error: ‘allocator’ is not a type
std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
^~~~~~~~~
更多上下文:
我有模板类,它保留一些内存。这是通过shared_ptr完成的,后者是使用自定义的分配器和删除器创建的。分配器和删除器不是该类的模板参数。
我现在想向类添加一个调整大小的方法。我想避免提供新的分配器和Delter并想将它们保存在std::function
中。
输入
std::shared_ptr<unsigned char[]> mem(size_t, deleter, allocator);
size_t
不是值。您可能是说:
std::shared_ptr<unsigned char[]> mem(nullptr, deleter, allocator);
但是,std::shared_ptr
需要重新绑定分配器类型,而对于std::function<void(unsigned char*)>
则无法这样做。