C++11包装器function

知识回顾:
 

在C中我们要调用一个函数是需要用到函数指针

在C++中我们调用一个函数有两种方法。1.仿函数。2.lambda

多种方式在调用时,就会出现多种情况,为方便接收,C++11引出包装器的概念

 std::function类模板函数是一个通用的可调用对象的包装器,它用简单的、统一的方式处理可调用对象。使用包装器之前需要包含头文件:#include <functional>

格式:function<返回类型(参数列表)>

如果std::function对象未包装可调用对象,使用std::function对象将抛出std::bad_function_call异常。

三种调用

1.普通函数

//普通函数
void swap_func(int& r1, int& r2)
{int tmp = r1;r1 = r2;r2 = tmp;
}

2.仿函数

//仿函数
struct Swap
{void operator()(int& r1, int& r2){int tmp = r1;r1 = r2;r2 = tmp;}
};

3.lambda函数

	//lambda函数auto swaplambda = [](int& r1, int& r2) {int tmp = r1;r1 = r2;r2 = tmp;};

包装器的使用

	//利用包装器包装//包装基础函数--只传函数地址(函数名)function<void(int&, int&)> f1 = swap_func;f1(x, y);cout << x << " " << y << endl << endl;//包装仿函数--调用用A()function<void(int&, int&)> f2 = Swap();f2(x, y);cout << x << " " << y << endl << endl;//包装lambda函数--传lambda对象名function<void(int&, int&)> f3 = swaplambda;f3(x, y);cout << x << " " << y << endl << endl;

由function包装器定义知道,是一个function类,而使用类就需要创造一个类对象才能调用类里的东西,所以每个function包装器都需要创建一个类对象去接收对应需要包装的函数/对象

接收后function包装器定义的对象就是该包装器所包装的函数的函数名,可直接使用该对象去调用函数f3(x, y);

创造map去列出一系列对应可调用函数

	//列表初始化map<string, function<void(int&, int&)>> cmdOP = {{"函数指针", swap_func},{"仿函数", Swap()},{"lambda", swaplambda},};//map含有键值对《a,b》,[a]调用后就访问的他对应的b对象cmdOP["函数指针"](x, y);cout << x << " " << y << endl << endl;cmdOP["仿函数"](x, y);cout << x << " " << y << endl << endl;cmdOP["lambda"](x, y);cout << x << " " << y << endl << endl;

全部代码

#include<iostream>
#include<map>
#include<algorithm>
#include<functional>
using namespace std;//普通函数
void swap_func(int& r1, int& r2)
{int tmp = r1;r1 = r2;r2 = tmp;
}//仿函数
struct Swap
{void operator()(int& r1, int& r2){int tmp = r1;r1 = r2;r2 = tmp;}
};int main()
{int x = 0, y = 1;//原数cout << x << " " << y << endl;//lambda函数auto swaplambda = [](int& r1, int& r2) {int tmp = r1;r1 = r2;r2 = tmp;};//利用包装器包装//包装基础函数--只传函数地址(函数名)function<void(int&, int&)> f1 = swap_func;f1(x, y);cout << x << " " << y << endl << endl;//包装仿函数--调用用A()function<void(int&, int&)> f2 = Swap();f2(x, y);cout << x << " " << y << endl << endl;//包装lambda函数--传lambda对象名function<void(int&, int&)> f3 = swaplambda;f3(x, y);cout << x << " " << y << endl << endl;//列表初始化map<string, function<void(int&, int&)>> cmdOP = {{"函数指针", swap_func},{"仿函数", Swap()},{"lambda", swaplambda},};//map含有键值对《a,b》,[a]调用后就访问的他对应的b对象cmdOP["函数指针"](x, y);cout << x << " " << y << endl << endl;cmdOP["仿函数"](x, y);cout << x << " " << y << endl << endl;cmdOP["lambda"](x, y);cout << x << " " << y << endl << endl;return 0;
}

类的成员函数和普通调用区别

详细见:bind

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856122.shtml

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

相关文章

解决 ModuleNotFoundError: No module named

解决 ModuleNotFoundError: No module named &#x1f4bb; 解决 ModuleNotFoundError: No module named摘要引言正文内容&#x1f914; 报错问题解决思路解决方法1. 确认模块是否已安装2. 确认模块是否在当前Python环境中可用3. 检查模块的导入名称4. 检查Python路径5. 检查操…

论文辅导 | 基于K-means聚类和ELM神经网络的养殖水质溶解氧预测

辅导文章 模型描述 1&#xff09;相似度统计量构造。数据归一化后&#xff0c;利用皮尔森相关系数确定环境因子权重&#xff0c;构造相似日的统计量&#xff0d;相似度。 2&#xff09;K-means 聚类。根据相似度应用 K-means 聚类法对历史日数据样本聚类&#xff0c;找出合适样…

MC进样管PFA塑料管NEPTUNE Plus多接收等离子质谱仪配套管子

PFA进样管可适配Neptune plus多接收器等离子质谱仪&#xff08;MC-ICP-MS&#xff09;&#xff0c;广泛应用于地球化学、核保障、环境科学、金属组学领域&#xff0c;在生物、物理、化学、材料等多个学科的交叉方向也有良好的应用前景。 外观半透明&#xff0c;便于观察管内情况…

基于SpringBoot+Vue农产品管理与销售APP设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

Redis变慢了?之三

Redis变慢了&#xff1f;之三 Redis变慢了fork耗时优化方案 AOFAOF策略对性能影响 最后 Redis变慢了 Redis变慢上一篇文章地址&#xff1a;Redis变慢了&#xff1f;之二 这篇文章继续Redis变慢情况的分析。 fork耗时 在 Redis 中&#xff0c;fork 是一个非常重要的操作&…

【C++】list 容器的增删改查---模拟实现(图例超详细解析!!!)

目录 一、前言 二、 list 容器的模拟实现思 ✨ 模块分析 ✨ 作用分析 三、list的节点类设计 四、list 的迭代器类设计 ⭐ 迭代器类--存在的意义 ⭐ 迭代器类--模拟实现 &#x1f4a6; 模板参数 和 成员变量 &#x1f4a6; 构造函数 &#x1f4a6; 运算符的重载 &…

Rancher注册已有k8s集群

Rancher安装后注册K8s集群操作 1.Rancher安装 编辑docker—compose文件 version: 3.8services:rancher:image: registry.cn-hangzhou.aliyuncs.com/rancher-images/rancher:v2.8.5container_name: rancherprivileged: truerestart: unless-stoppedports:- "18080:80&qu…

昨天发的 npm 包,却因为 registry 同步问题无法安装使用

用过 HBuilderX 云打包的都知道&#xff0c;云上面的 Android 环境很有限&#xff0c;其实并不能覆盖 uniapp 生态所有的版本&#xff0c;甚至说只能覆盖最新的一两个版本。 如果你需要用到 HBuilderX 安卓云打包&#xff0c;就必须及时跟进 HBuilderX 的版本更新&#xff0c;…

全面升级,票据识别新纪元:合合信息TextIn多票识别2.0

票据识别 - 自动化业务的守门员 发票、票据识别&#xff0c;是OCR技术和RPA、CMS系统结合的一个典型场景&#xff0c;从覆盖率、覆盖面的角度来说&#xff0c;应该也是结合得最成功的场景之一。 产品简介 国内通用票据识别V2.0&#xff08;简称“多票识别2.0”&#xff09;是…

Java 集合框架详谈及代码分析(Iterable->Collection->List、Set->各接口实现类、Map->各接口实现类)

目录 Java 集合框架详谈及代码分析&#xff08;Iterable->Collection->List、Set->各接口实现类、Map->各接口实现类&#xff09;1、集合概述1-1&#xff1a;Java 集合概述1-2&#xff1a;List、Set、Map 三者的区别&#xff1f;1-3&#xff1a;集合框架底层数据结…

腾讯云[HiFlow】| 自动化 -------HiFlow:还在复制粘贴?

文章目录 前言&#xff1a;一&#xff1a;HiFlow是什么二&#xff1a;功能介绍1.全连接2.自动化2.1定时处理特定任务2.2实时同步变更信息2.3及时获取通知提醒 3.零代码4.多场景5.可信赖 三&#xff1a;用户体验最后 前言&#xff1a; 随着网络时代的不断发展&#xff0c;自动化…

KEYSIGHT是德E5063A网络分析仪

主要功能特性 E5061B 选择50或75Q输入 使用低频-射频选件(选件3L5/3L4/3L3)满足各类应用需求 频率最低达到5Hz 网络分析和阻抗分析相结合(需要选件005) 支持BenchVue 软件 E5063A 2端口&#xff0c;50Q&#xff0c;S参数测试仪 选择最适合您的测试需求和预算的VNA频率选件&…

spark学习总结

系列文章目录 第1天总结&#xff1a;spark基础学习 1- Spark基本介绍&#xff08;了解&#xff09;2- Spark入门案例&#xff08;掌握&#xff09;3- 常见面试题&#xff08;掌握&#xff09; 文章目录 系列文章目录前言一、Spark基本介绍1、Spark是什么1.1 定义1.2 Spark与M…

如何在2分钟内测出浓香型白酒的年份?

执笔 | 敏 敏 编辑 | 古利特 金庸先生所著的武侠小说《射雕英雄传》第十二回中&#xff0c;“北丐”洪七公在教授郭靖降龙十八掌时&#xff0c;用陈年美酒形容“亢龙有悔”——“&#xff08;亢龙有悔&#xff09;好比陈年美酒&#xff0c;上口不辣&#xff0c;后劲却醇厚无比…

【机器学习】使用Python实现图神经网络(GNN):图结构数据的分析与应用

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、图神经网络的基础知识1. 图的基本概念和术语2. 传统的图分析方法3. 图神经网络的基本原理4. GNN的基本模型 三、主要的图神经网络模型1. 图卷积网络&#xff08;Graph Convolutional Network, GCN&#xff09;2…

【并发编程】JUC并发编程

JUC并发编程 1. 线程基础知识复习2. CompletableFuture2.1 Future接口理论知识复习2.2 Future接口常用实现类FutureTask异步任务2.2.1 Future接口能干什么2.2.2 Future接口相关架构2.2.3 Future编码实战和优缺点分析2.2.4 完成一些复杂的任务 2.3 CompletableFuture对Future的改…

数学建模基础:统计模型

目录 前言 一、概率与统计基础 二、统计模型 三、Matlab统计工具箱 四、实例示范&#xff1a;市场调查分析 步骤 1&#xff1a;数据导入 步骤 2&#xff1a;数据可视化 步骤 3&#xff1a;建立多元线性回归模型 步骤 4&#xff1a;模型验证 步骤 5&#xff1a;模型应…

ArcGIS制作规划图卫星影像地图虚化效果

文章目录 一、效果展示二、加载数据三、效果制作四、注意事项一、效果展示 二、加载数据 订阅专栏后,从csdn私信查收实验数据资料,加载ArcGIS制作规划图卫星影像地图虚化效果.rar中的数据,如下所示: 三、效果制作 1. 创建掩膜图层 新建一个矢量图层,因为主要是作图需要…

深入探讨:UART与USART在单片机中串口的实际应用与实现技巧

单片机&#xff08;Microcontroller Unit, MCU&#xff09;是一种集成了处理器、存储器和输入输出接口的微型计算机。它广泛应用于嵌入式系统中&#xff0c;用于控制各类电子设备。UART和USART是单片机中常见的通信接口&#xff0c;负责串行数据传输。下面我们详细介绍它们在单…

Qt底层原理:深入解析QWidget的绘制技术细节(1)

在Qt5中&#xff0c;QWidget的绘制流程比较分散&#xff0c;网上介绍的文章也很少&#xff0c;因此写一篇文章总结记录一下这部分的知识点。 笔者使用的是Qt5.15.2的源码。 基本的绘制流程&#xff1a;从update到合成 更新请求&#xff08;Invalidate&#xff09;: 当一个QWidg…