当前位置: 首页 > article >正文

C++中的bind实践代码

1.std::bind是什么简单来说std::bind是一个函数适配器Adapter。核心作用是“预先固定”一个函数的某些参数从而生成一个新的函数对象。你可以把它想象成一个模具原来的函数需要 3 个原料你先塞进去 1 个固定的原料剩下的 2 个留空占位这就变成了一个只需要 2 个原料的新工具。2. 核心机制占位符 (std::placeholders)要使用std::bind必须先认识它的搭档占位符。它们位于std::placeholders命名空间下通常写成_1,_2,_3..._1代表新函数被调用时的第 1 个参数。_2代表新函数被调用时的第 2 个参数。以此类推。3. 代码实战我们需要包含头文件12#include functionalusingnamespacestd::placeholders;// 方便使用 _1, _2场景 A固定参数减少参数个数假设你有一个减法函数你希望得到一个“减去 10”的专用函数。12345678910111213141516#include iostream#include functionalusingnamespacestd::placeholders;intsub(inta,intb) {returna - b;}intmain() {// 使用 bind// 我们把 sub 的第二个参数 b 固定死为 10// _1 代表新函数 sub_ten 的第一个参数它会被填入 sub 的第一个位置 aauto sub_ten std::bind(sub, _1, 10);// 调用新函数// 实际执行的是 sub(20, 10)std::cout sub_ten(20) std::endl;// 输出 10return0;}场景 B参数重排改变参数顺序std::bind甚至可以颠倒参数的顺序。12345678// 还是上面的 sub(a, b) - a - b// 这次我们交换位置// sub 的第一个参数 (a) 吃新函数的第二个参数 (_2)// sub 的第二个参数 (b) 吃新函数的第一个参数 (_1)auto reverse_sub std::bind(sub, _2, _1);// 调用 reverse_sub(10, 20)// 实际执行 sub(20, 10) - 20 - 10std::cout reverse_sub(10, 20) std::endl;// 输出 10场景 C绑定成员函数最常用的旧式写法这是std::bind在 C11 初期最常见的用途配合std::function做回调特别是为了绑定this指针。123456789101112131415classHero {public:voidheal(intamount) {std::cout Healed amount hp. std::endl;}};intmain() {Hero myHero;// 绑定成员函数// 参数1成员函数指针 Hero::heal// 参数2对象实例的地址 myHero (作为隐式的 this)// 参数3占位符 _1 (将来传进来的 amount)std::functionvoid(int) func std::bind(Hero::heal, myHero, _1);func(50);// 输出: Healed 50 hp.}4. 这里的坑参数拷贝 vs 引用这是std::bind最容易出错的地方。std::bind默认是按值拷贝参数的如果你想绑定的参数是一个引用或者是一个无法拷贝的对象比如unique_ptr你必须显式使用std::ref或std::cref(const ref)。12345678910111213voidupdateScore(int score,intval) {score val;}intmain() {intmyScore 100;// 错误写法// auto update std::bind(updateScore, myScore, _1);// 这会导致 bind 内部拷贝了一份 myScore原本的 myScore 不会变。// 正确写法使用 std::refauto update std::bind(updateScore, std::ref(myScore), _1);update(20);std::cout myScore std::endl;// 输出 120}5. 灵魂拷问为什么现在不推荐用std::bind既然 Lambda 讲完了Bind 也讲完了我们对比一下。现在 C 社区包括官方指南强烈建议能用 Lambda 就别用 Bind。原因如下可读性差bind(func, _2, 10, _1)这种写法像是猜谜语你需要脑补参数填空的对应关系。而 Lambda[](int x, int y) { return func(y, 10, x); }一目了然。容易出错刚才提到的std::ref问题很容易忘记写导致很多隐晦的 Bug。而 Lambda 的捕获列表[]显式且直观。编译器优化Lambda 表达式对编译器来说是透明的代码块容易内联优化。std::bind生成的是复杂的模板对象编译器优化起来比较费劲有时会导致生成的二进制代码更大、更慢。对比示例12345// 任务调用 object.process(data)// 方式 1: std::bind (旧时代)auto task1 std::bind(MyClass::process, object, data);// 方式 2: Lambda (新时代 - 推荐)auto task2 [object, data]() { object.process(data); };到此这篇关于C中的bind代码实践的文章就介绍到这了

相关文章:

C++中的bind实践代码

1.std::bind是什么?简单来说,std::bind 是一个函数适配器(Adapter)。核心作用是“预先固定”一个函数的某些参数,从而生成一个新的函数对象。你可以把它想象成一个模具:原来的函数需要 3 个原料&#xff0c…...

WABT实战指南:用wasm-decompile精准逆向WebAssembly

1. 为什么你打开一个.wasm文件看到的全是乱码,而别人却能读出函数名和逻辑? WABT(WebAssembly Binary Toolkit)不是个“点开即用”的图形化工具,它是一套命令行驱动的底层解析引擎——这恰恰是它在逆向分析场景中不可…...

AI驱动的红队渗透工具包:Nmap语义解析与Metasploit动态编排

1. 这不是“AI渗透”的营销噱头,而是一套能真正缩短红队作业链路的工程化工具包“基于AI的红队渗透测试工具包,集成Nmap与Metasploit等工具”——这个标题里藏着三个被行业长期忽视却极为关键的断层:信息过载与决策延迟的断层、工具孤岛与流程…...

Unity根运动偏移问题:原理、诊断与五种生产级解决方案

1. 这个问题不是Bug,是Mecanim对根运动(Root Motion)的“诚实执行”你有没有遇到过这样的情况:在Unity里给一个角色模型配好了一套行走、奔跑、跳跃动画,一切看起来都很正常——预览窗口里动画流畅,状态机切…...

C++ 智能指针简介

文章目录1.由来2.基本思想3.引用计数4.实现模板参考文献1.由来 C 动态内存管理是通过一对运算符来完成的,new 用于申请内存空间,调用对象构造函数初始化对象并返回指向该对象的指针。delete 接收一个动态对象的指针,调用对象的析构函数销毁对…...

机器学习原子势能建模:深度集成与贝叶斯神经网络的不确定性估计对比

1. 项目概述与核心问题在材料科学和计算化学领域,机器学习原子间势能模型已经从一个前沿概念,变成了加速新材料发现和深入理解物质行为的核心工具。简单来说,它就像一个“超级拟合器”,通过学习大量已知的原子构型及其对应的能量和…...

Kali NetHunter移动渗透实战:Magisk模块化部署与外设适配

1. 这不是“手机装Kali”,而是重构移动安全测试的工作流很多人第一次看到“手机跑Kali NetHunter”时,下意识反应是:这不就是把Linux桌面系统硬塞进安卓里?界面卡、命令少、工具打不开,最后变成一个炫技失败的摆设。我…...

多极球谐函数:统一机器学习势函数描述符的数学基石

1. 项目概述:从原子环境到机器学习势函数在材料科学和计算化学领域,我们这些做模拟的人,每天都在和原子打交道。一个核心的挑战是:如何让计算机“理解”一个由几十、几百甚至上万个原子构成的复杂体系,并准确预测它的能…...

JMeter临界部分控制器:业务节奏建模与资源争用压测核心

1. 为什么“临界部分控制器”是压测中真正卡住团队的隐形瓶颈?在JMeter压测项目里,我见过太多团队把90%精力花在“怎么造出1000并发”上——线程组配好、HTTP请求写完、监听器一开,看着Active Threads曲线冲上峰值就以为大功告成。结果一进生…...

混沌系统预测:输入长度如何影响模型误差与稳定性

1. 项目概述与核心问题在时间序列预测领域,尤其是在处理像气象、流体力学、金融这样高度复杂、内在混沌的系统时,我们常常面临一个核心的工程与科学问题:模型到底需要看多长的历史数据,才能做出足够好的下一时刻预测?这…...

r0capture安卓抓包原理:绕过证书固定提取SSL密钥

1. 为什么传统安卓抓包在2024年已经“失效”了? 你有没有试过:Fiddler、Charles、Wireshark全装上,证书也手动导入了,App一打开就报错“网络连接异常”,或者干脆直接闪退?我去年帮三个客户做移动安全测试时…...

UABEA:Unity跨平台资源编辑与二进制解析工具深度指南

1. 为什么Unity开发者在2024年仍要为资源编辑发愁——UABEA不是另一个UI工具,而是解耦工作流的手术刀“UABEA:终极跨平台Unity游戏资源编辑器完全指南”这个标题里,“终极”二字不是营销话术,而是对当前Unity资源编辑生态痛点的精…...

深入Linux内核链表:从of_property_read_bool看设备树属性的组织与查找

深入Linux内核链表:从of_property_read_bool看设备树属性的组织与查找 在Linux内核开发中,设备树(Device Tree)作为描述硬件配置的标准方式,其高效解析机制一直是内核开发者关注的焦点。当我们调用 of_property_read_…...

手把手教你用CentOS 7搭建Fog Project网络克隆服务器(含DHCP/TFTP配置避坑指南)

CentOS 7实战:企业级Fog Project网络克隆系统部署全攻略当企业IT部门需要同时为数十台甚至上百台计算机部署操作系统时,传统的光盘或U盘安装方式显然效率低下。这正是Fog Project大显身手的场景——一个开源的网络克隆与系统部署解决方案。本文将带您从零…...

基于图神经网络的机器学习有限区域模型:边界处理与图结构设计实战

1. 项目概述与核心挑战最近几年,机器学习天气预测(MLWP)的进展让人有点兴奋,又有点眼花缭乱。从全球尺度的大模型到区域性的精细化预报,数据驱动的方法正在重新定义我们对大气模拟的理解。作为一名长期混迹在气象和计算…...

告别高分屏适配烦恼:从开发者视角详解Win10/Win11程序属性中的DPI设置原理

告别高分屏适配烦恼:从开发者视角详解Win10/Win11程序属性中的DPI设置原理在4K/5K显示器逐渐成为主流的今天,Windows开发者面临着一个看似简单却暗藏玄机的问题:为什么同一个应用在不同分辨率的屏幕上显示效果天差地别?更令人困惑…...

Unity序列化三要素:Serializable、SerializeField与SerializeReference详解

1. 为什么Unity序列化总让人困惑——从一个真实报错说起 刚接手一个老项目时&#xff0c;我遇到个特别典型的场景&#xff1a;美术同事在Inspector里调好了角色的装备配置&#xff0c;保存后切到另一台机器打开&#xff0c;所有装备栏全空了。Debug发现&#xff0c; List<E…...

卡梅德生物技术快报|蛋白的过表达质粒构建与生信分析实验全流程复盘

从事分子生物学实验的科研从业者&#xff0c;在开展功能蛋白研究时&#xff0c;蛋白的过表达质粒构建与诱导表达是必备核心技能。实操过程中&#xff0c;很多人会忽略前期生信分析的重要性&#xff0c;盲目设计引物、构建载体&#xff0c;导致蛋白的过表达失败、蛋白无活性、纯…...

卡梅德生物技术快报|真核蛋白表达信号肽筛选实验全流程复盘

从事分子生物学实验的科研人员&#xff0c;在开展真核蛋白表达实验时&#xff0c;经常遇到目的蛋白分泌量低、胞内滞留、活性丧失等问题。信号肽作为调控蛋白分泌的核心元件&#xff0c;其选型直接决定真核蛋白表达的成败与效率。本文基于经典科研实验&#xff0c;完整复盘 8 种…...

影刀RPA跨境店群自动化:从Chromium调度到分布式容器化运营的架构演进

定了。在这场旷日持久的跨境电商反爬风控拉锯战中&#xff0c;我们终于用一套基于 Python 深度协同的分布式微服务调度架构&#xff0c;重塑了跨境千店矩阵的自动化底座。 这几天&#xff0c;科技圈被“DeepSeek V4 首发华为昇腾芯片&#xff0c;国产 AI 开始打破英伟达 CUDA …...

基于动态生物标志物变化率的生物年龄预测:LightGBM模型与纵向数据分析实践

1. 项目概述与核心价值在预防医学和健康管理领域&#xff0c;我们常常面临一个根本性的难题&#xff1a;如何准确评估一个人的“真实”衰老程度&#xff1f;我们都知道&#xff0c;身份证上的“时序年龄”只是一个粗略的刻度&#xff0c;两个同龄人&#xff0c;一个可能精力充沛…...

LLM提示压缩技术:原理、实现与优化实践

1. 提示压缩技术概述在大型语言模型&#xff08;LLM&#xff09;应用中&#xff0c;推理延迟已成为关键瓶颈。当处理包含多个检索段落的RAG&#xff08;检索增强生成&#xff09;系统时&#xff0c;长上下文会导致提示&#xff08;prompt&#xff09;体积膨胀&#xff0c;显著增…...

如何为个人网站快速接入大模型问答功能使用Taotoken

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 如何为个人网站快速接入大模型问答功能使用Taotoken 为个人网站或博客添加一个智能问答模块&#xff0c;可以显著提升访客的互动体…...

幻兽帕鲁玩不了?别急着删游戏!手把手教你用命令行参数搞定UE5黑屏闪退

幻兽帕鲁玩不了&#xff1f;别急着删游戏&#xff01;手把手教你用命令行参数搞定UE5黑屏闪退 每次打开《幻兽帕鲁》都卡在黑屏界面&#xff1f;游戏刚启动就闪退&#xff1f;这种体验确实让人抓狂。作为一款采用虚幻引擎5&#xff08;UE5&#xff09;技术打造的热门游戏&…...

ESPIM架构:稀疏计算与存内计算融合,突破边缘AI推理内存墙

1. 项目概述&#xff1a;当稀疏计算遇上存内计算在边缘设备上部署大型语言模型&#xff08;LLaMA、GPT等&#xff09;进行推理&#xff0c;正成为一个越来越普遍的需求。无论是出于隐私保护&#xff0c;还是为了应对有限的无线带宽&#xff0c;本地化推理都展现出巨大吸引力。然…...

C#模拟DirectInput鼠标玩FBA街机:协议级输入桥接方案

1. 这不是游戏外挂&#xff0c;而是让老街机在现代系统上“活过来”的底层输入桥接你有没有试过把一台尘封十年的FBA模拟器翻出来&#xff0c;想重温《街头霸王2》搓招的快感&#xff0c;结果鼠标点来点去像在操作PPT——按住左键拖动是移动光标&#xff0c;松开才是“出拳”&a…...

解决Keil MDK中RL-ARM许可证错误L9937E的方法

1. 问题现象与背景解析最近在维护一个基于Keil MDK的嵌入式老项目时&#xff0c;遇到了一个棘手的许可证错误。项目需要使用RL-ARM实时库&#xff08;Real-Time Library&#xff09;&#xff0c;但编译时出现了以下错误提示&#xff1a;Error: L9937E: RL-ARM is not allowed w…...

FastTrack:基于机器学习力场快速计算离子迁移能垒的高效方法

1. 项目概述与核心思路在材料研发&#xff0c;尤其是能源材料领域&#xff0c;我们常常需要回答一个核心问题&#xff1a;离子在这个材料里跑得快不快&#xff1f;这个“快慢”的微观物理本质&#xff0c;就是原子或离子在晶格中迁移时需要克服的能量壁垒&#xff0c;即迁移能垒…...

OpenCL图像格式兼容性与性能优化指南

1. OpenCL图像格式兼容性解析在OpenCL编程中&#xff0c;图像处理是一个核心功能模块。图像格式的正确配置直接影响着内核程序的执行效率和结果的准确性。CL_UNSIGNED_INT8和CL_RGB作为OpenCL中常见的图像格式参数&#xff0c;它们的兼容性问题值得深入探讨。1.1 图像格式描述符…...

机器学习在天文大数据中的应用:自动化分类近邻星系百万恒星

1. 项目概述&#xff1a;当机器学习遇见近邻星系的大质量恒星在浩瀚的宇宙中&#xff0c;大质量恒星&#xff08;通常指质量超过8倍太阳质量的恒星&#xff09;是名副其实的“宇宙引擎”。它们虽然数量稀少&#xff0c;但通过强烈的星风和最终的超新星爆发&#xff0c;深刻地影…...