C++标准是否定义了将函数静态包装为类型的工具?
C++标准是否提供了将函数包装为类型的工具?
我想知道C++标准里有没有定义一种工具,能把函数包装为类型(区别于包装为值)。搜索了相关名称没找到结果,但可能存在命名不好猜的同类工具。
补充说明
- 已经了解可以动态承载函数值的类型(比如
std::function或者函数指针int(*f)(int)),但这类类型本身不包含实际要调用的具体函数; - 也知道可以通过
decltype(fn)获取函数类型,但这也不符合我的需求。
需求说明
我需要创建一种类型,它的operator()要和指定函数(比如第三方C库的foo函数)完全匹配,并且使用时能被完全内联。单次实现很简单,比如:
struct foo_t { ret_t operator()(SomeType t, int i) { return foo(t, i); } };
这种需求常见于给std::unique_ptr<T,D>定义删除器(对接C库的不透明句柄)的场景,需要为多个函数创建这类类型,例如:
std::unique_ptr<FILE*, fclose_t> f(fopen(n, "r")); std::unique_ptr<obj*, free_t> o((obj*)malloc(sizeof(obj))); // ...
我希望不用手动定义fclose_t、free_t这些类型,而是用类似type_fn<fclose>的形式:
std::unique_ptr<FILE*, type_fn<fclose>> f(fopen(n, "r")); std::unique_ptr<obj*, type_fn<free>> o((obj*)malloc(sizeof(obj))); // ...
自己实现type_fn并不复杂,比如:
template<auto *f> struct fn_type { template<class... A> auto operator() (A&&... a) { return f(std::forward<A>(a)...); } };
核心问题
C++标准是否定义了这类工具?
内容的提问来源于stack exchange,提问作者BCS
相关产品推荐
相关产品推荐

