- 主题:分享个万能资源管理类UniqueResource
欢迎拍砖并帮忙改进
github dot com /z16166/UniqueResource
受std::experimental::unique_resource这个提案的启发
--
FROM 221.220.171.*
【 在 z16166 的大作中提到: 】
: 欢迎拍砖并帮忙改进
: github dot com /z16166/UniqueResource
: 受std::experimental::unique_resource这个提案的启发
代码写的很好,学习了
RAII Wrapper 实现挺多的,平时用的多的是这个 github dot com /martinmoene/scope-lite
完整实现了 C++ standard libraries extensions, version 3
--
FROM 182.150.116.*
原来是gsl-lite的作者。
他这个实现代码里为了兼容各种情形,看着好头大
我一般用unique resource,外加SCOPE_EXIT{}宏,再加上点helper class。
【 在 hanjiamajia 的大作中提到: 】
:
: 代码写的很好,学习了
: RAII Wrapper 实现挺多的,平时用的多的是这个 github dot com /martinmoene/scope-lite
: ...................
--
修改:z16166 FROM 221.220.171.*
FROM 221.220.171.*
宏劝退
【 在 z16166 的大作中提到: 】
: 原来是gsl-lite的作者。
: 他这个实现代码里为了兼容各种情形,看着好头大
: 我一般用unique resource,外加SCOPE_EXIT{}宏,再加上点helper class。
: ...................
--
FROM 124.114.151.*
这个干嘛用的?和 unique_ptr<> 加一个 wrapper 有啥不同?
【 在 z16166 的大作中提到: 】
: 欢迎拍砖并帮忙改进
: github dot com /z16166/UniqueResource
: 受std::experimental::unique_resource这个提案的启发
--
FROM 167.220.233.*
make_scope_exit()返回一个临时变量,这个变量一般是用宏来自动命名的。
要是手动给每个这样的临时变量命名,那会很繁琐。
【 在 DoorWay 的大作中提到: 】
: 宏劝退
--
FROM 221.220.171.*
每个资源有3个东西:类型、默认值、清理函数,
1、类型是通过模板参数传入的,
2、默认值、清理函数通过traits提供,可以扩展自己的traits。
就Windows平台举例,有很多资源的类型都是HANDLE,
但默认值有NULL的,也有INVALID_HANDLE_VALUE的,这应该是MS内部各个team不统一的锅。
清理函数有CloseHandle()的,也有FindClose()的。
你可以用unique_ptr<> 加一个 wrapper,处理一下这些试试,
就是说,我传递进来一个HANDLE,是要调用CloseHandle()来关闭它,还是用FindClose()关闭呢?
【 在 mango7788 的大作中提到: 】
: 这个干嘛用的?和 unique_ptr<> 加一个 wrapper 有啥不同?
--
修改:z16166 FROM 221.220.171.*
FROM 221.220.171.*
如果用 smart pointer 来实现的话,也是用模版参数指定 deleter 啊。
等我仔细看看你的实现。
【 在 z16166 的大作中提到: 】
: 我传递进来一个HANDLE,是要调用CloseHandle()来关闭它,还是用FindClose()关闭呢?
--
FROM 167.220.233.*
我看了你的实现。挺好的。
【 在 z16166 的大作中提到: 】
: 每个资源有3个东西:类型、默认值、清理函数,
: 1、类型是通过模板参数传入的,
: 2、默认值、清理函数通过traits提供,可以扩展自己的traits。
: ...................
--
FROM 114.252.220.*
但是,这个不就是模板特化的用处么?用lambda更方便一些
// primary template
template<class resource_tag_t, class resource_t, class default_initator_t, class deleter_t>
std::unique_ptr<resource_t, delete_r> make_unique_resource()
{
//..construct unique_ptr using resource_t/default_initiator_t/deleter_t
}
// user specialization
struct stdout_res;
template<class resoruce_tag_t>
requires std::same_as<resource_t, stdout_res>
auto make_unique_resource<stdout_res, type, initiator_lambda, deleter_lambda>(){}
【 在 z16166 的大作中提到: 】
: 每个资源有3个东西:类型、默认值、清理函数,
: 1、类型是通过模板参数传入的,
: 2、默认值、清理函数通过traits提供,可以扩展自己的traits。
: ...................
--
FROM 183.128.161.*