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