C++11函数封装器 std::function

✅ 1. 什么是 std::function

std::functionC++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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值