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

C++函数指针与回调函数详解:从青铜到王者,一文搞懂`std::function`的降维打击!

引言:为什么你的代码需要“传函数”?

想象你在写一个排序算法,但不确定用户想按升序还是降序排;
或者设计一个按钮控件,但不知道点击后要执行什么操作…
回调函数就像“代码外挂”——允许你把函数当参数传递,实现灵活的逻辑控制!
std::function则是C++11给我们的超级外挂升级包!


第一章:函数指针——C语言时代的“遥控器”

1. 基本概念

函数指针就是指向函数的指针变量,可以像普通函数一样被调用。

// 声明格式:返回类型 (*指针名)(参数类型列表)
void (*funcPtr)(int);  // 声明一个指向“接受int参数且无返回”函数的指针
2. 实战用法
// 示例函数
void printNumber(int num) {
   
    cout << "数值:" << num << endl;
}

// 赋值函数指针
funcPtr = &printNumber;  // 或直接 funcPtr = printNumber;

// 通过指针调用函数
funcPtr(42);  // 输出:数值:42
3. 经典应用:回调函数
// 回调函数类型定义
typedef void (*Callback)(int);

// 执行回调的函数
void processData(int data, Callback cb) {
   
    // 处理数据...
    cb(data * 2);  // 回调
}

// 调用示例
processData(21, printNumber);  // 输出:数值:42

痛点总结
✅ 优点:直接、高效
❌ 缺点:无法捕获上下文、类型限制严格(如无法处理lambda)


第二章:std::function——C++11的万能函数容器

1. 基本概念

std::function通用函数包装器,可以保存任何可调用对象:

  • 普通函数
  • 成员函数
  • Lambda表达式
  • 函数对象(重载了operator()的类)
#include <functional>  // 必须包含的头文件

// 定义格式:std::function<返回类型(参数类型列表)>
std::function

相关文章:

  • PVE使用一个物理网卡采用VLAN为管理IP和VM分配网络的问题
  • 【MYSQL】视图
  • 蓝桥杯小白打卡第五天
  • 什么是算法的空间复杂度和时间复杂度,分别怎么衡量。
  • 【故障处理】- 执行命令crsctl query crs xxx一直hang
  • 采用分布式部署deepseek
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_memalign函数
  • van-field的maxlength属性为空会导致输入框的值被清空。
  • SSML语音合成标记语言开发指南:从基础语法到实战案例解析
  • [250217] x-cmd 发布 v0.5.3:新增 DeepSeek AI 模型支持及飞书/钉钉群机器人 Webhook 管理
  • windows 设置poppler
  • unordered_set 和 unordered_map的模拟实现(c++)
  • 【Go入门篇】第一章:从 Java/Python 开发者的视角入门go语言
  • 半导体制造中的“魔法盾牌”:二氧化硅
  • 前端知识速记--HTML篇:HTML5的新特性
  • vLLM专题(六)-Pooling模型
  • floodfill算法系列一>扫雷游戏
  • vue基础(十)
  • 如何使用 Ollama 在本地设置和运行 DeepSeek R1
  • 如何使用 Docker 搭建 FastAPI 环境, 本地仅编辑代码
  • 宁波银行一季度净利74.17亿元增5.76%,不良率持平
  • 亮剑浦江丨上海网信部门处罚一批医疗服务类互联网企业,三大类问题值得关注
  • 外交部:对伊朗拉贾伊港口爆炸事件遇难者表示深切哀悼
  • 修订占比近30%收录25万条目,第三版《英汉大词典》来了
  • 人民日报:广东全力推动外贸稳量提质
  • 乌克兰否认俄收复库尔斯克州,称战斗仍在持续