我有一些关于IT技术的内容需要翻译,涉及到C语言编写的代码和相关资源。其中包含以下函数:
ResourcePointer resource_new(void);
void resource_delete(ResourcePointer *res);
其中ResourcePointer
是什么
typedef void * ResourcePointer;
我想为
std::unique_ptr
创建一个 typedef
,指定自定义默认删除器。下面的代码可以工作,但需要重复使用
resource_delete
。typedef std::unique_ptr<std::remove_pointer<ResourcePointer>::type,
void(*)(ResourcePointer)> Resource_auto_pointer;
并且在代码后面
Resource_auto_pointer resource(resource_new(), resource_delete);
...
Resource_auto_pointer res2 = { resource_new(), resource_delete };
我应该如何更改 typedef
,以便编译器在需要时自动替换 resource_delete
?
我希望我的代码像下面这样
Resource_auto_pointer2 resource (resource_new());
...
Resource_auto_pointer2 res2 = { resource_new() };
编译器应该想办法猜到它应该为每个类型为 Resource_auto_pointer2 的对象调用 resource_delete。
我在 MS Visual Studio 2013 中工作。
更新: 我已经阅读了其他类似问题的答案。 有两件事我不明白。 1.为什么 std::function 不起作用? 2.既然(可能)一切都已经说过了,为什么我需要创建新的类型?
std::unique_ptr<void, void(&)(void*)> make_resource() { return std::unique_ptr<void, void(&)(void*)>(resource_new(), resource_delete); }
?示例 - Kerrek SB