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;找出合适样…

SQLite 与 Python:集成与使用

SQLite 与 Python:集成与使用 SQLite 是一种轻量级的数据库管理系统,而 Python 是一种广泛使用的高级编程语言。这两种技术可以很好地结合在一起,为开发者提供强大的数据管理能力。本文将探讨如何在 Python 中集成和使用 SQLite,包括基本概念、安装过程、关键函数以及实际…

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 是一个非常重要的操作&…

【安全函数】常用的安全函数的使用

前言 本文章描述常用的不安全函数与对应的安全函数的使用。 不安全函数原型参考菜鸟教程。 不安全函数与相应的安全函数 输入输出 sprintf 功能 发送格式化输出到 str 所指向的字符串sprintf()函数 C 标准库 #include <stdio.h>函数原型 int sprintf(char *str,…

【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…

Want 概述

一、Want概述 1.1、Want的用途 在Stage模型中&#xff0c;Want是对象间信息传递的载体&#xff0c;可以用在应用组件间的信息传递。相当于FA模型的Intent。作为startAbility的参数&#xff0c;包含指定的启动目标&#xff0c;以及启动时需要携带的相关数据&#xff08;bundle…

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

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

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

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

签约+1!鼎鼎安全选择 TDengine Cloud 优化智能空闸开关

近日&#xff0c;全托管的物联网、工业大数据云服务平台 TDengine Cloud 又增加了一项新签约&#xff0c;成功应用于青岛鼎鼎安全技术有限公司智能空闸开关项目中。 据了解&#xff0c;在此次合作中&#xff0c;鼎鼎安全将其知名产品——智能空闸开关与 TDengine 的实时存储技术…

【并发编程】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的改…