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

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)
http://www.xdnf.cn/news/14445.html

相关文章:

  • 卫星通信链路预算之一:信噪比分配
  • JavaSE: 数组详解
  • JSONP 跨域请求原理解析与实践
  • RabbitMQ消息队列实战指南
  • 亚马逊选品时怎么选择一个产品
  • 智能土木通 - 土木工程专业知识问答系统01:项目简介
  • 逆元 Inverse element
  • c语言学习_函数4
  • 【Dify系列】【Dify 核心功能】【应用类型】【四】【Chatflow】
  • Science 正刊:脊髓损伤患者的复杂触觉离现实又近了一步
  • 观察者模式Observer Pattern
  • 基于STM32的超声波模拟雷达设计
  • 3 Studying《THE CACHE MEMORY BOOK》
  • python3.9成功安装nbextensions
  • 【Linux入门】安装一个Linux内核的虚拟机
  • 【IQA技术专题】-PSNR和SSIM
  • DOM-Based XSS(基于文档对象模型的跨站脚本攻击)
  • leetcode 搜索插入位置 java
  • 定时器时基单元参数配置及计算公式
  • Python | Python中最常用的100个函数(含内置函数、标准库函数及第三方库)
  • 基于 Transformer RoBERTa的情感分类任务实践总结之五——剪枝
  • 使用LDA进行主题建模:发现文本中的隐藏主题 - 父亲节特别版
  • 【旧题新解】第 9 集 带余除法
  • router.push()
  • 疗愈经济崛起:如何把“情绪价值”转化为医疗健康产品?
  • 我的研究方向是关于联邦学习的数据隐私保护,这些都是我在学校过程中遇到的困惑,借助ai来解决我的问题,也分享给大家。联邦学习的公开数据集,数据集的使用方法等
  • 《解码SCSS:悬浮与点击效果的高阶塑造法则》
  • 电影院管理系统的设计与实现
  • O - 方差
  • 【项目实训】【项目博客#06】大模型微调与推理优化(4.21-5.11)