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

C++11function包装器的使用

类模板std::function是一种通用、多态的函数包装。std::function的实例可以对任何可以调用的目标实体进行存储、
复制和调用操作。这些目标实体包括普通函数、Lambda表达式、函数指针、以及其他函数对象等。std::function对象是对
C++中现有的可调用实体的一种类型安全的包裹(像函数指针这类可调用实体,是类型不安全的)
    通常std::function是一个函数对象类,它包装其它任意的函数对象,被包装的函数对象具有类型为T1,...Tn的n个参数
并且可返回一个可转换到R类型的值。std::function使用模板转换构造函数接收被包装的函数对象。
    准确来说,可调用对象有如下几种定义:
    (1)是一个函数指针;
    (2)是一个具有operator()成员函数的类对象
    (3)是一个可以被转换为函数指针的类对象
    (4)是一个类成员函数指针

#include<iostream>
#include<functional>
using namespace std;void func(int x)
{cout << "func name:" << __FUNCTION__ << endl;cout << "x=" << x << endl;
}
class Foo
{
public:static int foo_func(int x){cout << "func name:" << __FUNCTION__ << endl;cout << "x=" << x << endl;return x;}
};
class Bar
{
public:int operator()(int x){cout << "func name:" << __FUNCTION__ << endl;cout << "x=" << x << endl;return x;}
};
int main()
{int x = 10;//绑定一个普通函数std::function<void(int)> fr1 = func;fr1(x);//绑定一个类的静态成员函数std::function<int(int)> fr2 = Foo::foo_func;cout << fr2(x) << endl;Bar bar;fr2 = bar;std::cout << fr2(x) << endl;return 0;
}

相关文章:

  • 如何使用Java发送SOAP请求与webservice 服务进行通信
  • 如何搭建springBoot项目中的全局异常处理和自定义异常处理
  • golang通过go-aci适配神通数据库
  • 【全网最全】2024电工杯数学建模B题问题一14页论文+19建模过程代码+py代码+2种保奖思路+数据等(后续会更新成品论文等)
  • CCF-CSP认证 2024年3月 4.化学方程式配平
  • SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包
  • SQL、Mongo、Redis一般适用于那些场景
  • 【GO基础】1. Go语言环境搭建
  • Kafka之【生产消息】
  • 虹科案例丨VLAN不再难懂:一台转换器+交换机轻松解锁VLAN配置
  • VUE-watch和watchEffect的区别
  • 景源畅信数字:抖音小店新手该怎么做?
  • 修改MySQL root用户密码
  • Threes 特效 炫酷传送门HTML5动画特效
  • 信息系统项目管理师--八大绩效域-规划绩效域
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 08.Android之View事件问题
  • 2017前端实习生面试总结
  • 30天自制操作系统-2
  • Android系统模拟器绘制实现概述
  • C++入门教程(10):for 语句
  • express如何解决request entity too large问题
  • github指令
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java-详解HashMap
  • opencv python Meanshift 和 Camshift
  • Python利用正则抓取网页内容保存到本地
  • React Native移动开发实战-3-实现页面间的数据传递
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 分享一份非常强势的Android面试题
  • 计算机常识 - 收藏集 - 掘金
  • ------- 计算机网络基础
  • 力扣(LeetCode)21
  • 力扣(LeetCode)965
  • 聊一聊前端的监控
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 软件开发学习的5大技巧,你知道吗?
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 因为阿里,他们成了“杭漂”
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 仓管云——企业云erp功能有哪些?
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • $ git push -u origin master 推送到远程库出错
  • $NOIp2018$劝退记
  • (1)SpringCloud 整合Python
  • (31)对象的克隆
  • (Forward) Music Player: From UI Proposal to Code
  • (HAL库版)freeRTOS移植STMF103
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (pojstep1.3.1)1017(构造法模拟)
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking