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.pswp.cn/pingmian/84929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos系统docker配置`milvus-standalone`教程

本人使用的是京东云服务器docker配置milvus 参考教程&#xff1a;https://blog.csdn.net/withme977/article/details/137270087 需要注意&#xff1a;虚拟机安装pymilvus和docker安装milvus版本需要对应&#xff0c;否则会出现connection失败问题 查看虚拟机pymilvus版本&…

AI for 数据分析:技术演进与应用实践

一、AI 数据分析的核心定义与技术演进 概念延伸&#xff1a;从传统分析到智能分析 传统数据分析工作&#xff0c;主要依赖人工使用 Excel、SPSS 等统计工具进行建模与分析。这种方式不仅效率较低&#xff0c;而且对专业人员的依赖度极高。而 AI 驱动的数据分析则借助机器学习…

stm32 f103c8t6仿真 串口收发测试

C8T6串口概述 STM32F103C8T6微控制器包含3个串口模块&#xff1a; USART1 (高级串口) USART2 USART3 (部分型号可能标记为UART3) 引脚分布图 USART1 (串口1) 基本特性 类型&#xff1a;全功能USART(通用同步异步收发器) 通信模式&#xff1a; 全双工异步通信 单线半…

语言特性适用的场景:卫星、火箭控制系统用什么开发语言?

核心飞行控制系统开发语言 卫星、火箭及相关航天系统的软件开发对可靠性、实时性、安全性有极高要求&#xff0c;因此语言选择需严格匹配这些需求。以下是航天领域常用的编程语言及其应用场景分析&#xff1a; 一、核心飞行控制与嵌入式系统&#xff1a;C、C、Ada 航天器的核…

AI for Science:智能科技如何重塑科学研究

AI与科学研究的邂逅 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;作为一门致力于模拟人类智能的交叉学科&#xff0c;近年来已经从实验室走向现实世界的各个角落&#xff0c;而科学研究领域正是其最具变革潜力的舞台之一。AI的核心在于通过算法…

项目三 - 任务7:开发名片管理系统

在本次项目三的任务7中&#xff0c;我们成功开发了一个功能全面的名片管理系统。该系统采用Java语言&#xff0c;基于MVC&#xff08;模型-视图-控制器&#xff09;架构模式&#xff0c;实现了用户登录、名片的增删改查等核心功能。通过设计Card类来封装名片信息&#xff0c;Ca…

MySQL 8.0 OCP 英文题库解析(十八)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题161~170 试题1…

leetcode_503 下一个更大元素

1. 题意 在一个循环数组中&#xff0c;找到下一个比它大的数。 2. 题解 也不知道怎么就单调栈了&#xff0c;可能是刷出来的吧。。。 还是来解释一下吧&#xff01;&#xff01;&#xff01; 如果有新元素入栈 c c c&#xff0c; 那么在栈内的元素只要小于新元素的 s s s…

在postgresql中,group by时取第一个值

在postgresql中,group by时,uuid类型的字段可以用哪个聚集函数: SELECT create_user , (array_agg(myid))[1] AS first_uuid FROM "t_resource_data" GROUP BY create_user 人大金仓、PostgreSQL使用GROUP BY聚合后&#xff0c;取第一个值或最后一个值的办_pgsql gro…

【FineDance】ModuleNotFoundError: No module named ‘pytorch3d‘

pytorch3d Traceback (most recent call last): File “/home/zhangbin/perfwork/01_ai/13_FineDance/data/code/pre_motion.py”, line 12, in from dataset.quaternion import ax_to_6v, ax_from_6v File “/home/zhangbin/perfwork/01_ai/13_FineDance/dataset/quaternion.…

MySQL 调优笔记

1.如何定位慢查询? 定位慢查询主要依靠 MySQL 的慢查询日志配合工具如 pt-query-digest &#xff0c;mysqldumpslow 进行分析&#xff0c;或者通过 performance_schema 进行实时监控&#xff0c;进一步可以使用 EXPLAIN 分析执行计划。 -> 开启慢查询日志 -- 查看慢查询…

嵌入式 STM32 开发问题:烧录 STM32CubeMX 创建的 Keil 程序没有反应

烧录 STM32CubeMX 创建的 Keil 程序没有反应问题原因 大概率是因为没有勾选 Reset and Run&#xff0c;程序成功烧录到&#xff0c;但芯片不会自动复位并执行&#xff0c;而是保持停止状态 处理策略 在 Keil 中勾选 Reset and Run 点击 【Options for Target】 点击 【Debu…

Flower框架中noise_multiplier与clipped_count_stddev的关系

noise_multiplier 与 clipped_count_stddev 的数学关系 在差分隐私联邦学习中&#xff0c;noise_multiplier 和 clipped_count_stddev 是两个核心参数&#xff0c;它们共同决定了隐私保护强度和模型精度的权衡。理解它们的关系需要从差分隐私的数学原理入手&#xff1a; 1. 高…

Laravel 从版本 5 到 12 每个版本都引入了一些新的特性、改进和弃用的功能

Laravel 从版本 5 到 12 经历了多次更新,每个版本都引入了一些新的特性、改进和弃用的功能。下面是这些主要版本之间的关键区别: Laravel 5 Lumen: 引入了微框架 Lumen。Elixir: Elixir 是一个用于编译和合并前端资源的工具,后来被 Laravel Mix 取代。Middleware Groups: 引…

Lambda 表达式的语法与使用:更简洁、更灵活的函数式编程!

全文目录&#xff1a; 开篇语Lambda 表达式的语法与使用&#xff1a;更简洁、更灵活的函数式编程一、Lambda 表达式的语法1.1 Lambda 表达式的基本语法形式 二、Lambda 表达式的使用2.1 Lambda 表达式与匿名内部类的对比代码示例&#xff1a;使用匿名内部类和 Lambda 表达式实现…

从0到1开发一个自己的工具 MCP 并发布到 test PyPi(Python个人版)

目录 1. 我理解的 MCP2. 写一个自己的MCP然后发布到 PyPi 上&#xff0c;包括加法工具和获取当前 ip 工具2.1 先碎碎念一下 uv2.2 初始化项目&#xff08;全程在 cmd 下运行命令&#xff09;2.3 添加 mcp 依赖2.4 添加 server.py&#xff0c;先把加法功能添加上2.5 运行并测试加…

RabbitMQ缓存详解:由来、发展、核心场景与实战应用

一、RabbitMQ的由来与发展历程 1.1 RabbitMQ的诞生背景 RabbitMQ诞生于金融行业的需求,最初由Rabbit Technologies Ltd开发,后被SpringSource收购,最终成为Pivotal的一部分。它的设计初衷是为了解决分布式系统中消息可靠传输的问题。在早期金融交易系统中,系统间的通信需…

机器学习与深度学习18-线性代数01

目录 前文回顾1.特征向量和特征值2.矩阵与模型3.内积和外积4.向量的范数5.正交矩阵 前文回顾 上一篇文章地址&#xff1a;链接 1.特征向量和特征值 在机器学习中&#xff0c;特征向量和特征值是用于描述数据集中的特征或变量之间关系的重要概念。它们在降维技术&#xff08;…

如何让 VS Code 仅通过滚轮放大字体,而不缩放整个界面?

在 VS Code 中&#xff0c;默认情况下使用 Ctrl滚轮&#xff08;Windows/Linux&#xff09;或 Cmd滚轮&#xff08;Mac&#xff09;会同时缩放整个界面&#xff08;包括 UI 元素和编辑器字体&#xff09;。如果你希望仅放大编辑器字体而不影响界面缩放&#xff0c;可以通过以下…

Vue3中v-bind指令用法详解

在 Vue 3 中&#xff0c;v-bind 是一个核心指令&#xff0c;用于动态绑定 HTML 属性或组件的 props 到 Vue 实例的数据。以下是详细讲解&#xff1a; 一、基础用法 1. 绑定单个属性 vue 复制 下载 <template><!-- 绑定 img 的 src 属性 --><img v-bind:src…