You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:25:23