可调用对象包装器

std::function是可调用对象的包装器。它是一个类模板,可以容纳除了类成员(函数)指针之外的所有可调用对象。通过指定它的模板参数,它可以用统一的方式处理函数,函数对象,函数指针,并允许保存和延迟执行它们。

基本用法:

std::function必须要包含一个叫做functional的头文件,可调用对象包装器使用语法如下:

#include <functional>
std::function<返回值类型(参数类型列表)> diy_name = 可调用对象;

1.包装普通函数

2.包装类的静态函数

3.包装仿函数

4.包装转换成函数指针的对象

代码如下:

#include <iostream>
#include <functional>
#include <string>
using namespace std;void print(int num, string name)
{cout << "id = "<<name << ",age = " << num << endl;
}using funcptr = void(*)(int, string);class Test
{public:static void world(int a, string s){cout << "number = " << a << ",name = " << s << endl;}void operator()(string msg){cout << "仿函数:" << msg << endl;}operator funcptr(){return world;}
};int main()
{//1.包装普通函数function<void(int, string)> f1 = print;//2.包装类的静态方法function<void(int, string)> f2 = Test::world;//3.包装仿函数Test ta;function<void(string)> f3 = ta;//4.包装转换成函数指针的对象Test tb;function<void(int, string)> f4 = tb;//调用f1(1, "ace");f2(2, "tom");f3("jack");f4(3, "lily");return 0;
}

测试结果:

代码如下:

#include <iostream>
#include <functional>
#include <string>
using namespace std;class A
{public:A(const function<void(int, string)> &f) :callback(f){}void notify(int id, string name){callback(id, name);}private:function<void(int, string)> callback;
};void print(int num, string name)
{cout << "id = " << name << ",age = " << num << endl;
}using funcptr = void(*)(int, string);class Test
{public:static void world(int a, string s){cout << "number = " << a << ",name = " << s << endl;}void operator()(string msg){cout << "仿函数:" << msg << endl;}operator funcptr(){return world;}
};int main()
{//1.包装普通函数function<void(int, string)> f1 = print;//2.包装类的静态方法function<void(int, string)> f2 = Test::world;//3.包装仿函数Test ta;function<void(string)> f3 = ta;//4.包装转换成函数指针的对象Test tb;function<void(int, string)> f4 = tb;A aa(print);aa.notify(1, "tom");A ab(Test::world);ab.notify(2, "jack");A ac(tb);ac.notify(3, "luf");return 0;
}

测试结果:

[C++11]可调用对象包装器function相关推荐

  1. [C++11]可调用对象绑定器

    std::bind用来将可调用对象与其参数一起进行绑定.绑定后的结果可以使用std::function进行保存,并延迟调用到任何我们需要的时候.通俗来说,它主要有两个作用: 1.将可调用对象与其参数一 ...

  2. C++11新特性之可调用对象包装器和绑定器

    一.可调用对象 C++中可调用对象有六种. 1.普通函数 普通函数类型可以声明函数,定义函数指针和引用,但是不能定义函数的实体. using Fun = void (int, const string ...

  3. C++新特性--函数对象包装器 function

    C++11 std::function 是一种通用.多态的函数封装,它的实例可以对任何可以调用的目标实体进行存储.复制和调用操作,它也是对 C++中现有的可调用实体的一种类型安全的包裹(相对来说,函数 ...

  4. 可调用对象、std::function、std::bind

    可调用对象.std::function.std::bind 仿函数functors function adapter bind(C++11) 函数适配器:bind2nd 仿函数适配器(mem_fun/ ...

  5. 《Java 核心技术卷1 第10版》学习笔记------ 对象包装器、自动装箱、拆箱

    有时, 需要将 int 这样的基本类型转换为对象. 所有的基本类型都冇一个与之对应的类.例如,Integer 类对应基本类型 int.通常, 这些类称为包装器 ( wrapper ) 这些对象包装器类 ...

  6. 对象包装器与自动(拆箱)装箱+参数数量可变的方法+枚举类

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 自动拆箱(装箱).printf的参数数量可变 以及 枚举类的详细说明: 0.2) 源代码: h ...

  7. JavaWeb项目中如何扩展一个Request对象——包装器HttpServletRequestWrapper

    一.使用场景 在一个JavaWeb中我们会遇到统一处理出入参或者处理特殊参数的场景,这些场景就需要我们扩展我们的Request对象.所谓的包装器就是在原来的基础上包装一下就是在原来功能上添加一些其他功 ...

  8. 对象包装器和自动装箱

    包装器(wrapper): 基本数据int有一个与之对应的类------Integer,通常,这样的类称之为包装器(wrapper) 如果有一个ArrayList<>,尖括号里是不允许使用 ...

  9. [C++11]可调用对象

    在C++中存在"可调用对象"这么一个概念,准确来说,可调用对象有如下几种定义: 1.是一个函数指针 代码如下: int print(int a, double b) {cout & ...

最新文章

  1. OpenStack计算节点AMQP5672报错
  2. 「mysql优化专题」90%程序员面试都用得上的索引优化手册(5)【面试重点】
  3. Yahoo! 的数据仓库: 世界上最大最忙
  4. JSON中,java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决
  5. linux下的一些常见命令学习,学习猿地-Linux下的常见命令总结
  6. qtplaintextedit如何删除内容_数据库中的数据如何进行批量修改
  7. virtualbox报错:Failed, trying without DKMS的解决方案
  8. vscode阅读linux源码
  9. 【HTML/CSS】表单美化
  10. play framework自定义插件plugin
  11. 服务器清理文件,裸金属服务器清理文件
  12. 世界GDP和新冠疫情直接关系
  13. ffmpeg probe一个文件的过程
  14. 在公众号添加付费链接
  15. 十年互联网项目实战经验分享:项目经理成长之路的三个层次
  16. 起点篇:跨入半导体行业,数字IC设计
  17. MapReduce快速入门系列(4) | Hadoop序列化
  18. 阿里云,华为云哪个更好?
  19. 【Python】进制、计算机中的单位、编码、数据类型、索引、字符串切片、字符串的功能方法
  20. 计算机电池的性能参数,【戴尔灵越3567笔记本电脑使用总结】体积|电池|性能_摘要频道_什么值得买...

热门文章

  1. C语言试题五之计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和
  2. php 读取三级分类,php excel 导入 导入三级分类 表格应该怎么设计才能得到想要的数据格式?汗血宝马...
  3. java 定时 spring_Spring定时任务实现与配置(一)
  4. 数学中不可能实现的图形
  5. 从小一看到数字,脑子里就开始搞颜色......
  6. 学会了!如果认错人了,就像这样亲一口!
  7. 每日一笑 | 老板,黑凤梨真的能吃吗?
  8. clover 主题_Clover主题更换
  9. set-cookie 和 cookie 的区别_Go Web 编程如何确保Cookie数据的安全传输
  10. 正弦波 程序 角度传感器_激光位移传感器的原理及应用领域