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

[原创](Modern C++)现代C++的std::bind花式绑定,使用方式大全.

[简介]
常用网名: 猪头三
出生日期: 1981.XX.XX
QQ联系: 643439947
个人网站: 80x86汇编小站 https://www.x86asm.org
编程生涯: 2001年~至今[共22年]
职业生涯: 20年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
std::bind是一个非常重要, 且非常实用的技术, 使用场景非常广泛. 简单通俗易懂解释就是: std::bind可以根据原有的函数对象, 映射出一个新的函数对象, 在映射的过程中, 新的函数对象的函数列表, 可以根据实际使用情况进行缩减.

[下面是几个常见的例子]

<1: 绑定普通函数>

void g_fun_BindedFunc(int int_param_A, int int_param_B)
{Application->MessageBox(System::Sysutils::IntToStr(int_param_A+int_param_B).c_str(), L"") ;return ;
}
auto bind_Func = std::bind(g_fun_BindedFunc,std::placeholders::_1,5) ; // 绑定
bind_Func(1,3) ; // 也可以是bind_Func(1). 因为这的3是所属第二个参数, 但该参数没有进行绑定, 所以形成无效参数.

<2: 绑定普通的模板函数>

template <class T>
void g_fun_BindedFunc(T int_param_A, T int_param_B)
{Application->MessageBox(System::Sysutils::IntToStr(int_param_A+int_param_B).c_str(), L"") ;return ;
}
auto bind_Func = std::bind(g_fun_BindedFunc<int>,std::placeholders::_1,5) ; // 绑定
bind_Func(1,3) ; // 也可以是bind_Func(1). 因为这的3是所属第二个参数, 但该参数没有进行绑定, 所以形成无效参数.

<3: 嵌套绑定>

void g_fun_BindedFunc(int int_param_A, int int_param_B)
{Application->MessageBox(System::Sysutils::IntToStr(int_param_A+int_param_B).c_str(), L"") ;return ;
}int g_fun_SubFunc(int int_param_A)
{return int_param_A ;
}auto bind_Func = std::bind(g_fun_BindedFunc,std::placeholders::_1,std::bind(g_fun_SubFunc, std::placeholders::_2)) ; // 嵌套绑定
bind_Func(1,2) ;

<4: 绑定类公有成员函数>

class BIND
{
public:int mpu_fun_SubFunc(int int_param_A){return int_param_A ;}int mpu_int_Data{10} ;};
BIND class_Bind ;
auto bind_Func = std::bind(&BIND::mpu_fun_SubFunc,&class_Bind,std::placeholders::_1) ; // 绑定类成员函数int int_Data = bind_Func(10) ;

<5: 绑定类共有成员变量>

class BIND
{
public:int mpu_fun_SubFunc(int int_param_A){return int_param_A ;}int mpu_int_Data{10} ;};
BIND class_Bind ;
auto bind_PublicMember = std::bind(&BIND::mpu_int_Data,std::placeholders::_1) ; // 绑定类成员变量int int_Data = bind_PublicMember(class_Bind) ;

<6: 绑定Lambda表达式>

auto test_Lambda = [](int int_param_A, int int_param_B) {return int_param_A + int_param_B ;} ;auto bind_Lambda = std::bind(test_Lambda,std::placeholders::_1,std::placeholders::_2) ; // 绑定Lambda表达式int int_Data = bind_Lambda(1, 2) ;
Application->MessageBox(System::Sysutils::IntToStr(int_Data).c_str(), L"") ;

[结尾]
std::bind目前以我的水平, 只能总结出6种情况的写法, 如果大家还有其他更高级的用法, 请留言给我, 我会及时更新.

相关文章:

[原创](Modern C++)现代C++的std::bind花式绑定,使用方式大全.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…...

Unity射击游戏开发教程:(13)如何在Unity中播放音效

在本文中,我将向大家展示一些为游戏添加声音的不同方法。 我们为游戏添加声音的第一种方法是播放背景音乐。在此,我们将创建游戏对象(“音频管理器”)并创建一个子游戏对象(“背景音乐”)。该子游戏对象将是播放音乐的对象,因此需要向其添加音频源组件。如果没有音频源组…...

Swift—手写防抖、手写图片预加载与多张图片拼接

什么是防抖&#xff0c;为什么要防抖&#xff1f; 比如我们在文档在线编辑中修改文档内容&#xff0c;总不能打一个字就发送一次更新请求吧&#xff0c;用户疯狂点击一个按钮&#xff0c;总不能一直触发按钮的逻辑吧。防抖被用于避免频繁触发的事件。 Swift实现防抖代码&…...

Redis过期键删除策略

Redis有三种过期键的删除策略。 定时删除&#xff1a;在设置键的过期时间的同时&#xff0c;创建一个定时器&#xff0c;让定时器在键的过期时间来临时&#xff0c;立即执行对键的删除策略。惰性删除&#xff1a;放任键过期不管&#xff0c;但每次从键空间获取键时&#xff0c…...

413 Request Entity Too Large

问题 平台上传文件接口报&#xff1a;413 Request Entity Too Large。 原因 从字面意思就能看出来&#xff0c;是上传文件过大导致的。 一般解决 一般情况下修改nginx配置文件中client_max_body_size参数的大小就行了。可以在http{ }中设置。也可以在server{ }中设置。还可…...

工业无风扇计算机的优点

无风扇计算机往往采用紧凑且密封的外形&#xff0c;使其坚固耐用&#xff0c;使其能够在需要现场工程师进行维护之前承受恶劣的环境数年。机载移动部件较少或没有移动部件会降低组件无法按预期运行的可能性&#xff0c;或者更糟糕的是发生故障和损坏。采用工业组件和较低的散热…...

个人学习计划

vue前端&#xff08;一周&#xff09; 05/14 - 05/19 Html、css复习、vue基础复习、axios复习 05/14 ElementUI学习 05/15 JWT集成验证码、token 05/16 vue-route多角色登录 05/17 增删查改、文件下载 05/18 Echart饼状图 05/19 &#x1f4cc; 附加学习&#xff1a; 父子传值三…...

【电控实物-LK电机】

参数 Kt 0.11 N.M/A...

《Mybatis》系列文章目录

什么是 MyBatis&#xff1f; MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff…...

ARM机密计算组件

安全之安全(security)博客目录导读 目录 ​一、硬件架构 1、RME 二、软件和固件架构 1、RMM 2、其他固件标准&#xff08;例如PSCI&#xff09; 三、开源实现 1、TF-A 2、Veraison 3、工具链 四、动态TrustZone技术 Arm机密计算架构(Arm CCA)引入了一系列硬件和软件…...

Linux 生态与工具

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 目录 Linux生态简介:Linux工具lrzsz&#xff…...

RHCE网络服务配置之循环执行的例行性工作

1、什么是循环执行的例行性工作 循环执行的例行性工作&#xff1a;每隔一定的周期就需要执行一次 2、crontab的工作过程 /etc/cron.allow&#xff0c;写在该文件的人可以使用crontab命令 /etc/cron.deny&#xff0c;黑名单 两个文件如果都不存在&#xff0c;只有root能使用…...

vue3使用el-radio-group获取表格数据无法选中问题

这里是引用 今天写项目发现使用el-radio-group无法获取表格中的数据&#xff0c;于是去官网查看了一下&#xff0c;发现写的没啥问题&#xff0c;就是 <el-radio value"1" size"large"> 未知</el-radio>这样的写法&#xff0c;又在网上看了一些…...

java并发

基本概念 并发编程可以抽象成三个核心问题: 分工、同步/协作、互斥分工 将当前 Sprint 的 Story 拆分成「合适」大小的 Task,并且安排给「合适」的 Team Member 去完成 拆分的粒度太粗,导致这个任务完成难度变高,耗时长,不易与其他人配合;拆分的粒度太细,又导致任务太多…...

Python Selenium Grid 环境快速搭建

今天在看selenium grid文档的时候&#xff0c;发现selenium grid4的设计还是不错的&#xff0c;想顺手体验一下&#xff0c;于是就发现了docker-selenium项目&#xff0c;可以快速的设置好selenium grid环境&#xff0c;非常简单方便。 然而后面准备用python去写个简单例子的时…...

电机控制系列模块解析(21)—— 弱磁控制

一、弱磁控制 常用的FW即弱磁控制方法一般为&#xff1a;电压外环控制、单个电流环控制、直接输出电压幅值分配控制、输出电压角度PI控制、不弱磁控制、直接解析解、查表、速度反比例曲线拟合等等。 弱磁控制相关因素&#xff1a;过调制&#xff08;母线电压的剧烈波动&#x…...

【3dmax笔记】022:文件合并、导入、导出

文章目录 一、合并二、导入三、导出四、注意事项一、合并 只能合并 max 文件(高版本能够合并低版本模型,低版本不能合并高版本的模型)。点击【文件】→【导入】→【合并】: 选择要合并的文件,后缀名为3dmax默认的格式,max文件。 二、导入 点击【文件】→【导入】→【导…...

8、QT——QLabel使用小记2

前言&#xff1a;记录开发过程中QLabel的使用&#xff0c;持续更新ing... 开发平台&#xff1a;Win10 64位 开发环境&#xff1a;Qt Creator 13.0.0 构建环境&#xff1a;Qt 5.15.2 MSVC2019 64位 一、基本属性 技巧&#xff1a;对于Qlabel这类控件的属性有一些共同的特点&am…...

python实现读取串口数据-使用LibModbus库实现一个实时读取串口数据

在工业自动化领域&#xff0c;Modbus协议因其简单、可靠和广泛支持而备受青睐。其中&#xff0c;Modbus RTU&#xff08;串行通信&#xff09;以其低成本和易实施性在许多场景中发挥着重要作用。 01 Modbus RTU协议简介 Modbus RTU是一种基于串行通信的Modbus协议&#xff0c;…...

类与面向对象编程(Object-Oriented Programming, OOP)

类与面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;&#xff08;一&#xff09; 对象比较&#xff1a;‘is’ 对比 ‘’ 当我还是个孩子的时候&#xff0c;我们的邻居拥有一对双胞胎猫咪。它们看起来几乎一模一样—同样的炭黑色毛发和同样锐利的绿色…...

从门电路到芯片:拆解一个D触发器,看数字电路如何实现‘记忆’这个核心功能

从门电路到芯片&#xff1a;拆解一个D触发器&#xff0c;看数字电路如何实现‘记忆’这个核心功能 数字世界的每一个比特信息都需要被精确存储和传递&#xff0c;而实现这一功能的核心元件便是触发器。当我们按下电脑的电源键&#xff0c;屏幕上闪现的第一个像素到硬盘中保存的…...

RK3576+Hailo-8异构计算:破解高帧率摄像头实时AI分析算力瓶颈

1. 项目概述&#xff1a;从“看得见”到“看得懂”的实时化挑战最近在折腾一个智能安防的项目&#xff0c;客户提了个听起来简单但做起来挠头的要求&#xff1a;他们希望摄像头不仅能24小时不间断录像&#xff0c;还要能“实时”分析画面里发生的事——比如识别出有人闯入、车辆…...

ArcGIS 10.2.2许可服务罢工了?别慌,试试这个替换Service.txt和ARCGIS.exe的终极方案

ArcGIS 10.2.2许可服务故障终极修复指南&#xff1a;深入解析文件替换方案 当ArcGIS 10.2.2的许可服务突然罢工&#xff0c;所有常规方法都失效时&#xff0c;那种挫败感只有GIS专业人员才能真正体会。你试过关闭防火墙、调整服务启动类型、甚至重启服务器&#xff0c;但那个令…...

哔咔漫画下载器:构建个人离线漫画库的完整解决方案

哔咔漫画下载器&#xff1a;构建个人离线漫画库的完整解决方案 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器&#xff0c;带图形界面 带收藏夹&#xff0c;已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mir…...

如何在Windows上快速挂载ISO镜像?WinCDEmu虚拟光驱终极指南

如何在Windows上快速挂载ISO镜像&#xff1f;WinCDEmu虚拟光驱终极指南 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu 还在为ISO、IMG等光盘镜像文件无法直接使用而烦恼吗&#xff1f;还在为没有物理光驱而无法读取光盘内容而困扰吗…...

户外太阳能监控供电方案:如何用CN3791芯片为3.7V锂电池设计稳定充电电路?

户外太阳能监控供电方案&#xff1a;CN3791芯片在3.7V锂电池充电电路中的实战设计 清晨六点&#xff0c;当第一缕阳光洒在郊区的通信基站上&#xff0c;搭载CN3791芯片的太阳能供电系统已经开始为锂电池注入能量——这正是现代户外监控设备赖以生存的"能量心脏"。在无…...

3步掌握TransNet V2:从零开始实现智能视频镜头检测

3步掌握TransNet V2&#xff1a;从零开始实现智能视频镜头检测 【免费下载链接】TransNetV2 TransNet V2: Shot Boundary Detection Neural Network 项目地址: https://gitcode.com/gh_mirrors/tr/TransNetV2 想要快速分析视频内容结构&#xff0c;自动识别镜头切换点吗…...

FPGA 51,基于 ZYNQ 7Z010 的 FPGA 高速路由转发加速系统架构设计(Xilinx ZYNQ-MINI 7Z010 CLG400 -1)

目录 前言 一、系统整体架构设计 1.1 设计目标与性能指标...

Windows权限终极指南:5个场景掌握TrustedInstaller权限提升

Windows权限终极指南&#xff1a;5个场景掌握TrustedInstaller权限提升 【免费下载链接】RunAsTI Launch processes with TrustedInstaller privilege 项目地址: https://gitcode.com/gh_mirrors/ru/RunAsTI 当你面对Windows系统那些"拒绝访问"的提示时&#…...

推理服务为什么一上自动 Prompt 优化就开始成本失控:从 Prompt 版本爆炸到在线 A/B 收敛的工程实战

一、自动 Prompt 优化的成本幻觉 不少团队上线推理服务后&#xff0c;发现同一任务换句 Prompt 输出质量可提升 20%。&#x1f680; 自动 Prompt 优化因此成了香饽饽——系统同时维护几十个版本在线分流。但两周后账单涨了 40%。⚡️ 问题不在 Prompt&#xff0c;而是版本爆炸把…...