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

std::function的概念和使用方法

一、概念

std::function是 C++ 标准库中的一个模板类,定义在<functional>头文件中。它是一种通用的多态函数包装器,其实例能够对任何可调用对象进行存储、复制和调用操作,这些可调用对象包括普通函数、函数指针、成员函数指针、函数对象(仿函数)等,从而可以统一处理不同类型的可调用实体。

二、使用方法

1. 包含头文件

   #include <functional>

2. 包装普通函数

   #include <iostream>#include <functional>int add(int a, int b) {return a + b;}int main() {std::function<int(int, int)> func = add;int result = func(3, 4);std::cout << "Result: " << result << std::endl;return 0;}

3. 包装函数对象(仿函数)

   #include <iostream>#include <functional>struct Multiply {int operator()(int a, int b) const {return a * b;}};int main() {Multiply multiplyObj;std::function<int(int, int)> func = multiplyObj;int result = func(3, 4);std::cout << "Result: " << result << std::endl;return 0;}

4. 包装成员函数

   #include <iostream>#include <functional>class MyClass {public:int add(int a, int b) {return a + b;}};int main() {MyClass obj;std::function<int(MyClass*, int, int)> func = &MyClass::add;int result = func(&obj, 3, 4);std::cout << "Result: " << result << std::endl;return 0;}

5. 在容器中存储不同类型的可调用对象

   #include <iostream>#include <vector>#include <functional>int add(int a, int b) {return a + b;}struct Subtract {int operator()(int a, int b) const {return a - b;}};int main() {std::vector<std::function<int(int, int)>> funcs;funcs.push_back(add);funcs.push_back(Subtract());for (const auto& func : funcs) {int result = func(5, 3);std::cout << "Result: " << result << std::endl;}return 0;}

std::function使得代码更加灵活和可维护,它允许在运行时根据需要切换不同的可调用对象,而无需修改大量的代码。

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

相关文章:

  • OpenAI的Swarm是一个实验性质的多智能体编排框架
  • 简易STL实现 | Map 的实现
  • `concurrent.futures` 是 Python 标准库中的一个模块
  • PicoQuant GmbH公司Dr. Christian Oelsner到访东隆科技
  • leetcode128最长连续序列 golang版
  • 【OpenCV】(六)—— 阈值处理
  • 重学SpringBoot3-集成Redis(九)之共享Session
  • Linux:信号保存与处理
  • 工具方法 - 可选的一些AI聊天机器人
  • YOLOv11改进策略【卷积层】| CVPR-2023 ScConv:即插即用,减少冗余计算并提升特征学习
  • 总结拓展十四:批次管理(2)
  • 架构设计笔记-18-安全架构设计理论与实践
  • Python网络爬虫
  • 38. 外观数列
  • Android中的三种数据存储方式
  • VS2022中Qt环境配置步骤
  • 【前端】 常用的版本控制符号汇总
  • OWASP Top 10 漏洞详解:基础知识、面试常问问题与实际应用
  • 实景三维赋能自然资源精细化管理创新
  • Science Robotics 通过新材料打造FiBa软机器人 可实现四种形态进化
  • C++ 的特性可以不用在主函数中调用
  • 香港大学神作 LightRAG 横空出世!AI 检索生成系统革命,秒懂复杂信息,动态数据无所遁形!
  • 云栖实录 | 智能运维年度重磅发布及大模型实践解读
  • Vue3中防止按钮重复点击的方式
  • windows主机重新安装zabbix agent提示please clear the previous agent registration
  • 一个将.Geojson文件转成shapefile和kml文件的在线页面工具
  • Mamba学习笔记(1)——原理基础
  • linux应用
  • 【千库网-注册安全分析报告】
  • 【LwIP源码学习3】TCP协议栈分析——数据接收流程