std::move_only_function 是 C++23 引入的仅支持移动语义的函数包装器,用于封装 unique_ptr、mutex 等不可拷贝的可调用对象,满足 MoveConstructible/MoveAssignable 要求,不支持拷贝和 target 相关反射接口。
std::move_only_function 是 C++23 引入的新特性,用来替代传统 std::function 中“仅支持可复制”这一限制,专为**只可移动(move-only)的可调用对象**设计。它不强制要求底层可调用对象支持拷贝,因此能包装 lambda 捕获了 unique_ptr、fstream、mutex 或其他不可拷贝资源的闭包,也能包装 std::unique_ptr<:any_callable> 等 move-only 类型。
std::function 要求其模板参数 F 必须满足 CopyConstructible。这意味着:如果你写了一个捕获了 std::unique_ptr 的 lambda,它本身不可拷贝,就无法存入 std::function —— 编译直接失败。
而 std::move_only_function 只要求 MoveConstructible 和 MoveAssignable,彻底解除了拷贝约束,让 move-only 逻辑可以自然封装和传递。
它的模板形参和调用签名声明方式与 std::function 高度一致:
std::move_only_function,例如 std::move_only_function
.target()、.target_type() 等反射接口(因 move-only 存储通常需类型擦除 + 动态分配,元信息难保全)以下代码展示如何包装一个带 unique
_ptr 捕获的 lambda:
auto make_move_only_task() {
auto ptr = std::make_unique(42);
// 此 lambda 不可拷贝(unique_ptr 不可拷贝)
return std::move_only_function{[ptr = std::move(ptr)]() mutable {
return *ptr;
}};
}
int main() {
auto f = make_move_only_task(); // OK: 移动构造
// auto f2 = f; // ❌ 编译错误:不可拷贝
auto f3 = std::move(f); // ✅ 合法:可移动
std::cout << f3() << "\n"; // 输出 42
}
再比如包装一个临时的 std::unique_ptr<:function>> 或自定义 move-only 函数对象,也都适用。
if (f),但调用前务必判空(和 std::function 一致)-std=c++23
它不是 std::function 的“升级版”,而是互补角色:需要拷贝时用 std::function,只需移动时用 move_only_function —— 更精准表达意图,也更安全。
# ai
# c++
# stream
# 编译错误
# 为什么
# if
# 封装
# int
# void
# Lambda
# 指针
# 接口
# fstream
# 堆
# 闭包
# 形参
# function
# 对象
# 时用
# 这一
# 如果你
# 也能
# 只需
# 也都
# 或其他
# 写了
# 自定义
# 不支持
相关文章:
建站之星如何配置系统实现高效建站?
宝塔建站后网页无法访问如何解决?
,网站推广常用方法?
建站VPS能否同时实现高效与安全翻墙?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
建站主机解析:虚拟主机配置与服务器选择指南
如何在阿里云购买域名并搭建网站?
北京网站制作的公司有哪些,北京白云观官方网站?
如何快速完成中国万网建站详细流程?
php json中文编码为null的解决办法
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何快速重置建站主机并恢复默认配置?
网站微信制作软件,如何制作微信链接?
如何用wdcp快速搭建高效网站?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
建站之星安装步骤有哪些常见问题?
小建面朝正北,A点实际方位是否存在偏差?
如何用花生壳三步快速搭建专属网站?
如何在建站之星网店版论坛获取技术支持?
如何在VPS电脑上快速搭建网站?
如何在香港免费服务器上快速搭建网站?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
深圳网站制作的公司有哪些,dido官方网站?
如何在IIS7中新建站点?详细步骤解析
建站OpenVZ教程与优化策略:配置指南与性能提升
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
建站三合一如何选?哪家性价比更高?
测试制作网站有哪些,测试性取向的权威测试或者网站?
北京的网站制作公司有哪些,哪个视频网站最好?
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何通过西部数码建站助手快速创建专业网站?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
建站之星后台密码遗忘?如何快速找回?
韩国服务器如何优化跨境访问实现高效连接?
如何在新浪SAE免费搭建个人博客?
建站之星如何快速生成多端适配网站?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何用低价快速搭建高质量网站?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
建站之星代理费用多少?最新价格详情介绍
详解jQuery中基本的动画方法
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何在Tomcat中配置并部署网站项目?
为什么Go需要go mod文件_Go go mod文件作用说明
C#如何在一个XML文件中查找并替换文本内容
,交易猫的商品怎么发布到网站上去?
宝塔新建站点报错如何解决?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
*请认真填写需求信息,我们会在24小时内与您取得联系。