✅ 1. 什么是 std::function
std::function
是 C++11
引入的标准库工具,是一个通用的函数封装器,可以包装以下任意可调用对象:
- 普通函数
- Lambda 表达式
- 函数指针
- 成员函数指针
- 函数对象(也叫仿函数,定义了
operator()
的类)
你可以把它理解为:
一个可以存储和调用函数的变量。
✅ 2. 使用语法
#include <functional>std::function<返回值类型(参数类型列表)> 变量名;
比如:
std::function<int(int, int)> f;
表示一个接收两个 int
参数,返回 int
的函数对象变量。
✅ 3. 使用示例
📌 普通函数
int add(int a, int b) { return a + b; }std::function<int(int, int)> f = add;
std::cout << f(2, 3); // 输出 5
📌 Lambda 表达式
std::function<void()> hello = [](){ std::cout << "Hello!\n"; };
hello(); // 输出 Hello!
📌 仿函数(函数对象类)
struct MyFunctor {void operator()() { std::cout << "I'm a functor\n"; }
};std::function<void()> f = MyFunctor();
f(); // 输出 I'm a functor
✅ 4. 特点总结
特性 | 描述 |
---|---|
类型安全 | 编译时检查参数和返回值类型是否匹配 |
可赋值可拷贝 | std::function 可以被赋值给另一个 std::function 变量 |
可为空 | 它可以像指针一样为空,用 if (f) 检查是否可调用 |
抽象统一接口 | 可以让你写灵活的接口函数,接收任意类型的可调用对象(统一成 std::function) |