C++ std::function的使用方法(c++11)

2023-10-31

std::function是C函数指针的升级版,使C的面向过程与C++面向对象有了较大的区分,function在使用时需要包含头文件 #include <functional> 以及名字空间 std.,看下面的代码:

/*

std::function的使用

*/

#include <iostream>
#include <functional>

using namespace std;

//声明function变量,参数为返回值为int,形参是int的函数
std::function<int(int)> Func;

int fun1(int a)
{
    cout << "我是普通函数" << endl;
    return a;
}

// Lambda表达式
auto lambda_fun = [](int i)-> int 
{
	cout << "我是lambda表达式" << endl;
	return i; 
};

// 仿函数
class Functor 
{
public:
	int operator()(int i) 
	{
		cout << "仿函数" << endl;
		return i;
	}
};

class Test 
{
public:
	int foo(int i) 
	{ 
		cout << "类成员函数" << endl;
		return i; 
	}

	static int staticFunc(int i) 
	{ 
		cout << "类静函数" << endl;
		return i; 
	}
};


int main()
{
	//给function赋值普通函数
	Func = fun1;
	cout << Func(1) << endl;

	//给function赋值lambda表达式函数
	Func = lambda_fun;
	cout  << Func(2) << endl;

	//给function赋值仿函数对象
	Functor functor;
	Func = functor;
	cout << Func(3) << endl;

	//给function赋值为类成员函数
	Test testObj;
	Func = std::bind(&Test::foo, testObj, std::placeholders::_1);
	cout << Func(4) << endl;

	//给function赋值为类静态函数
	Func = Test::staticFunc;
	cout  << Func(5) << endl;

	return 0;
}

function的绑定主要有五种方式:普通函数,lambda表达式函数,仿函数对象,类成员函数,类静态函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ std::function的使用方法(c++11) 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • Ubuntu 16.04.6 搭建FTP服务器

    Ubuntu 16 04 6 搭建FTP服务器 安装vsftpd3 0 3 FTP服务器 配置vsftpd 创建虚拟用户 新建用户例子 安装vsftpd3 0 3 FTP服务器 sudo apt install vsftpd 配置vsftp
  • SpringCloud开发-云效流水线使用

    前言 2018年使用云效的时候 当时功能还不完善 并且有很多流程走不通 因此没有正式使用流水线做CICD工作 后来有幸听了云效产品经理分享 会议上了解到云效将会重构 就等着重构后再来使用 今年刚好需要使用CICD 就再研究了下新版的云效 其
  • 高斯-赛得尔迭代式 c++_高斯ALT 71,一把让你意想不到的机械键盘

    我记得我入坑机械键盘的第一把键盘是108键的 因为我觉得键盘就应该是这样 不完整的键位还叫键盘么 但是我渐渐发现事实上键盘上的好多按键我基本很少用或者不用 那么我有必要把桌面本来就紧凑的空间留给那些我不用的按键么 在想通了这个问题之后 我爱
  • 芭乐BootstrapTable视频组件不同使用方法的效率各有差异

    自己需求处理的问题 需求 设备端批量发送数据过来 数据已依照特定字段进行排序 现在自己需求依照传过来的数据动态更新表格 表格的显示区域有限制 因为一些原因 终究确认运用 Bootstrap Table 组件完成该功能 遇到的问题 问题 运用
  • dw怎么让html使用css样式,dw怎么用css样式?

    dw怎么用css样式 首先介绍一下CSS样式的属性 CSS样式属性被分为八大类 类型 背景 区块 方框 边框 列表 定位 扩展 类型主要定义文本的字体 大小 颜色 行高和修饰等 如图所示 方法一 内联样式可以通过style属性直接套进定义对
  • 百度地图API 实现多个已知地址的同时展示

    用到的API类 Icon LocalSearch Label Point Marker NavigationControl OverviewMapControl 具体的使用就不赘述了 写这个的背景 公司要一起出去TB 然后选择了自驾 就要收
  • 在Linux服务器上出现PermissionError: [Errno 13] Permission denied: ‘ffmpeg‘

    下载参考链接中的ffmpeg压缩包后 通过filezilla拖到服务器的 anaconda3 envs envs name bin中 显示PermissionError Errno 13 Permission denied ffmpeg 运
  • 蓝桥杯超声波,完全不抖,测距一米以上

    定时器扫描的方法 include
  • Python之条件语句&逻辑运算符

    目录 一 逻辑运算符 1 基本运算符 2 比较运算符 3 赋值运算符 二 if条件语句
  • Array merging

    Array merging 题意 给出两个长度为n的数组a b 现在每次可以取出任意一个数组的第一个元素 放到c数组的后面 c数组一开始为空 求c数组连续相等的最长子串长度 思路 这里可以用两个map把a b数组每个元素对应的连续相等的最长
  • VisualStudio快捷键

    常用 注释 选定要注释的区域 ctrl K 然后再ctrl C 解注释 选定要注释的区域 ctrl U 1 仿制 剪切 删去整行代码 1 假如你想仿制一整行代码 只需将光标移至该行 再运用组合键 Ctrl C 来完结仿制操作 而无需挑选整行
  • Python——matplotlib

    一 基础 plt savefig test dpi 600 将绘制的图画保存成png格式 命名为 test plt ylabel Grade y轴的名称 plt axis 1 10 0 6 x轴起始于 1 终止于10 y轴起始于0 终止于6
  • sql进行两个关联表,根据其中一个表的一个属性进行条件查询查询

    我最近遇到了表的查询 但是通过查询发现 网上的sql的大神 写的文章到底是什么玩意 我打算自己写一个sql专栏 特意讲解sql的使用 来帮助大家 这篇文章技术指导为sql进行两个关联表 根据其中一个表的一个属性进行条件查询查询 假设只有两张
  • 华为OD机试真题-TLV解码-2023年OD统一考试(B卷)

    题目描述 TLV编码是按 Tag Length Value 格式进行编码的 一段码流中的信元用Tag标识 Tag在码流中唯一不重复 Length表示信元Value的长度 Value表示信元的值 码流以某信元的Tag开头 Tag固定占一个字节
  • 优惠券系统应该如何设计?

    优惠券是一套规则的组合 它的基本信息包括优惠券名称 发放数量 优惠券是否可叠加 每人限领张数 是否和其他促销同时使用 优惠优先级 使用规则等 那优惠券系统应该如何设计 一起来文章中中看看 知识总结很重要 不管是每周的周报 还是阶段性的项目总
  • FastDFS分布式文件系统入门(二)-FastDFS安装配置详解

    一 FastDFS安装配置 1 下载 需要如下的安装包 包名 下载地址 fastdfs100 fastdfs V6 06 zip https gitee com fastdfs100 fastdfs fastdfs100 libfastco
  • string.h文件中函数的详细用法

    常用 函数如下 strlen求字符串长度 strcmp比较2个字符串是否一样 strcat字符串连接操作 strcpy字符串拷贝操作 strncpy字符串拷贝操作 前n个字符 strncpy字符串拷贝操作 前n个字符 strchr 查询子串
  • STM32开发——串口通讯(第2篇)——WIFI(Esp8266)

    目录 1 ESP8266 作为设备 2 ESP8266作为服务器 注意 1 在中断中一般不直接在中断服务函数里处理数据 而是在收到数据后直接丢给队列 再处理数据 2 在中断服务函数里尽量减少使用延时函数及打印函数 1 ESP8266 作为设
  • ansible踩坑——环境变量问题

    问题现象 使用ansible启动远程服务器的node服务 环境变量未被加载 本地测试打印环境变量为空 定位原因 1 环境变量问题 首先ansible使用的是ssh的方式下发命令 为no login shell的方式登陆 在ubuntu的配置
  • C++ std::function的使用方法(c++11)

    std function是C函数指针的升级版 使C的面向过程与C 面向对象有了较大的区分 function在使用时需要包含头文件 include