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

[原创](Modern C++)现代C++的std::function, 强大的多态函数包装器(包含std::mem_fn使用方式).

[简介]
常用网名: 猪头三
出生日期: 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::function的主要作用是:存储, 复制和调用任何函数(通过指向它的指针), lambda表达式, 绑定表达式或其他函数对象, 以及指向成员函数的指针和指向数据成员的指针.

[使用方式大全]

<1: 包装普通函数>

int func(double) {return 0;
}
std::function func_wapper{func} ;

<2: 包装Lambda表达式>

int int_Data = 5;
std::function func_wapper = [&](double){return int_Data;} ;

<3: 包装std::bind对象>

int func(double) {return 0;
}
std::function<void()> func_wapper = std::bind(func, 10) ;
func_wapper() ;

<4: 包装类共有成员函数>

class WAPPER
{
public:int mpu_fun_SubFunc(int int_param_A){return int_param_A ;}
};
std::function<int(WAPPER&, int)> func_wapper = &WAPPER::mpu_fun_SubFunc ;
WAPPER class_WAPPER ;
func_wapper(class_WAPPER, 10) ;

<5: 包装类共有成员变量>

class WAPPER
{
public:int mpu_int_Data{10} ;
};
std::function<int(WAPPER&)> func_wapper = &WAPPER::mpu_int_Data ;
WAPPER class_WAPPER ;
func_wapper(class_WAPPER) ;

<6: 包装通过std::bind绑定的类共有成员函数>

class WAPPER
{
public:int mpu_fun_SubFunc(int int_param_A){return int_param_A ;}
};
WAPPER class_WAPPER ;// 通过类对象绑定
std::function<int(int)> func_wapper = std::bind(&WAPPER::mpu_fun_SubFunc,class_WAPPER,std::placeholders::_1) ;// 通过类对象指针绑定
std::function<int(int)> func_wapper_ptr = std::bind(&WAPPER::mpu_fun_SubFunc,&class_WAPPER,std::placeholders::_1) ;func_wapper(10) ;
func_wapper_ptr(10) ;

<7: 利用std::mem_fn代替std::function进行包装类共有成员函数>
这个比较简单: 更多代码可以从: https://en.cppreference.com/w/cpp/utility/functional/mem_fn 获取.

class WAPPER
{
public:int mpu_fun_SubFunc(int int_param_A){return int_param_A ;}
};
auto func_mem_wapper = std::mem_fn(&WAPPER::mpu_fun_SubFunc) ;
WAPPER class_WAPPER ;
func_mem_wapper(class_WAPPER, 10) ;

[总结]
std::function, std::mem_fn, std::bind, 这3者之间的关系以及使用细节差异, 都是非常重要的. 在开发过程中, 是非常实用的技术, 使用场景非常广泛.
 

http://www.lryc.cn/news/350339.html

相关文章:

  • 解决间歇性 SSLPeerUnverifiedException 问题
  • Linux程序开发(一):Linux基础入门安装和实操手册
  • Java | Leetcode Java题解之第92题反转链表II
  • 声纹识别在无人机探测上的应用
  • 【数据结构】时间、空间复杂度实例分析
  • 2024生日快乐祝福HTML源码
  • Android系统不同版本存储权限
  • ue引擎游戏开发笔记(41)——行为树的建立(2)--丰富ai行为:巡逻后返回原处
  • Linux quotacheck命令教程:如何检查和修复文件系统的磁盘配额(附案例详解和注意事项)
  • Response对象的学习
  • QCustomplot---动态图
  • 蛋白聚乙二醇化修饰检测试剂盒
  • [Algorithm][回溯][字母大小写全排列][优美的排列][N皇后]详细讲解
  • .NET_NLog
  • Linux查看进程命令ps和top
  • 深入解析Wireshark1:从捕获到分析,一网打尽数据包之旅
  • C++语法|指向类成员(成员变量和成员方法)的指针及其相关应用场景
  • 【C语言】通讯录系统实现
  • (delphi11最新学习资料) Object Pascal 学习笔记---第12章第1节 ( 类静态方法与Windows API回调)
  • 第一个Rust程序
  • 【LInux】<基础IO> 文件操作 | 文件描述符 | 重定向
  • MySQL--增、删、改、查,
  • 5.12学习总结
  • ansible利用playbook 部署lamp架构
  • SPI通信(使用SPI读写W25Q64)
  • <sa8650>QCX Usecase 使用详解—拓扑图 XML 定义
  • 使用C++11实现Golang的defer功能
  • 前端之电力系统SVG图低代码
  • 括号生成[中等]
  • 配置ubuntu的VNC时遇到报错_XSERVTransmkdir: Mode of /tmp/.X11-unix should be set to 1777