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

[c++11]std::function/bind

function(可调用对象的包装器)

std::function是一个通用的函数封装类,它可以用来存储、复制和调用任何可调用对象(函数指针、函数对象、lambda表达式等)。
通过std::function,可以将不同类型的可调用对象封装为统一的类型,从而实现更灵活的函数传递和使用。

基本用法

//必须要包含一个叫做functional的头文件
#include <functional>//std::function<返回值类型(参数类型列表)> diy_name = 可调用对象;// 定义一个std::function对象,该对象可以接受两个整数参数并返回一个整数
std::function<int(int, int)> func;

存储可调用对象

// 存储函数指针
int add(int a, int b) {return a + b;
}
std::function<int(int, int)> func = add;// 存储lambda表达式
std::function<int(int, int)> func = [](int a, int b) { return a + b; };// 存储函数对象
struct Multiply {int operator()(int a, int b) {return a * b;}
};
Multiply multiply;
std::function<int(int, int)> func = multiply;

调用可调用对象

int result = func(3, 4); // 调用存储在func中的可调用对象

检查是否为空


if (func) {// func中存储了可调用对象
} else {// func为空
}

重置为nullptr

func = nullptr; // 清空func中的可调用对象

bind(绑定器)

std::bind用来将可调用对象与其参数一起进行绑定。绑定后的结果可以使用std::function进行保存,并延迟调用到任何我们需要的时候。

通俗来讲,它主要有两大作用:

  • 将可调用对象与其参数一起绑定成一个仿函数。
  • 将多元(参数个数为n,n>1)可调用对象转换为一元或者(n-1)元可调用对象,即只绑定部分参数。
    绑定器函数使用语法格式如下:
// 绑定非类成员函数/变量
auto f = std::bind(可调用对象地址, 绑定的参数/占位符);
// 绑定类成员函/变量
auto f = std::bind(类函数/成员地址, 类实例对象地址, 绑定的参数/占位符);
http://www.lryc.cn/news/596667.html

相关文章:

  • 基于SpringBoot+Vue的班级管理系统(Echarts图形化分析)
  • 101.对称二叉树
  • ubuntu 20.04 安装 cmake 3.26
  • VS Code 美化插件
  • 3ds Max 云端渲染插件 - 完整 Python 解决方案
  • Mysql-场景篇-2-线上高频访问的Mysql表,如何在线修改表结构影响最小?-1--Mysql8.0版本后的INSTANT DDL方案(推荐)
  • 基于mysql云数据库创建和美化表格,对比分析Power BI和Quick BI的功能优劣
  • 基于eBPF的Kubernetes网络故障自愈系统设计与实现
  • AI一周事件(2025年7月15日-7月21日)
  • 【Spring AI 0基础教程】1、基础篇 环境搭建 - 智能天气预报助手
  • 数据资产——解读数据资产全过程管理手册2025【附全文阅读】
  • 【时时三省】(C语言基础)指向函数的指针
  • 发票识别在费控系统应用剖析
  • Dify-13: 文本生成API端点
  • uniapp打开导航软件并定位到目标位置的实现
  • 从零搭建 OpenCV 项目(新手向)--第一天初识OpenCV与图像基础
  • 京东视觉算法面试30问全景精解
  • Thinkphp8使用Jwt生成与验证Token
  • 最新基于R语言结构方程模型分析与实践技术应用
  • 《C++》面向对象编程--类(中)
  • 八大作业票(一) 动火安全作业证
  • Spring Boot环境搭建与核心原理深度解析
  • 豪鹏科技锚定 “AI + 固态” 赛道:从电池制造商到核心能源方案引领者的战略跃迁
  • 大数学习笔记整理
  • iOS WebView 调试实战 localStorage 与 sessionStorage 同步问题全流程排查
  • Java(LinkedList和ArrayList底层分析)
  • Docker Compose UI远程访问教程:结合贝锐花生壳实现内网穿透
  • 应用层攻防启示录:HTTP/HTTPS攻击的精准拦截之道
  • 渗透部分总结
  • 大模型——Data Agent:超越 BI 与 AI 的边界