1. 简介

std::function是一个函数对象的包装器,std::function的实例可以存储,复制和调用任何可调用的目标,包括:

  1. 函数。
  2. lamada表达式。
  3. 绑定表达式或其他函数对象。
  4. 指向成员函数和指向数据成员的指针。

所存储的可调用对象被称为目标的std::function。如果一个std::function实例不包含目标,则将其称为空。调用空的std::function对象会导致抛出异常std::bad_function_call。

std::function满足CopyConstructible和CopyAssignable的要求。

std::function对象没有初始化任何实际的可调用元素,调用std::function对象将抛出std::bad_function_call异常。

2.1. Member types

成员类型 说明
result_type 返回类型
argument_type 如果函数对象只有一个参数,那么这个代表参数类型。
first_argument_type 如果函数对象有两个个参数,那么这个代表第一个参数类型。
second_argument_type 如果函数对象有两个个参数,那么这个代表第二个参数类型。

2.2. Member functions

成员函数声明 说明
constructor 构造函数:constructs a new std::function instance
destructor 析构函数: destroys a std::function instance
operator= 给定义的function对象赋值
operator bool 检查定义的function对象是否包含一个有效的对象
operator() 调用一个对象

2. 基本使用

 #include <iostream>
#include <functional>int fun(int a, int b, int c, int d) {std::cout << a << std::endl;std::cout << b << std::endl;std::cout << c << std::endl;std::cout << d << std::endl;return 0;
}class CCaller {
public:int operator()(int a, int b, int c, int d) {std::cout << a << std::endl;std::cout << b << std::endl;std::cout << c << std::endl;std::cout << d << std::endl;return 0;
}
};int main() {CCaller Caller;std::function<int(int, int, int, int)> f;f = [](int a, int b, int c, int d) -> int{std::cout << a << std::endl;std::cout << b << std::endl;std::cout << c << std::endl;std::cout << d << std::endl;return 0;};f(1, 2, 3, 4);f = Caller;f(10, 20, 30, 40);f = fun;f(100, 200, 300, 400);return 0;
}

从上面我们可以发现,std::function可以表示函数,lamada,可调用类对象。

参考文献

  • https://blog.csdn.net/xiangbaohui/article/details/106741654
  • https://blog.csdn.net/jinzhu1911/article/details/101307637?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control
  • http://www.cplusplus.com/reference/functional/function/

std::function简介相关推荐

  1. 函数指针与 std::function 简介

    ​ 在c/c++实际编程中,使用函数指针/function对象有时候可以让我们的代码更加简洁条理,尤其存在对同一对象多种不同的处理方案时,使用函数指针/function对象结合std::map等数据结 ...

  2. std::function用法详解

    std::function用法详解 代码在:VCCommon/functionDemo std::function 简介 类模板 std :: function 是一个通用的多态函数包装器. std ...

  3. 函数指针amp;绑定: boost::functoin/std::function/bind

    see link: https://isocpp.org/wiki/faq/pointers-to-members function vs template: http://stackoverflow ...

  4. C++ std::function<void(int)> 和 std::function<void()> 作为函数参数的注意事项

    前言 std::function 作为标准库提供的函数指针,使用起来还是比较方便的,不过在使用过程中有一些需要注意的细节,这里做一个简单的记录. 基本使用 头文件: #include <func ...

  5. C++11中std::function的使用

    类模版std::function是一种通用.多态的函数封装.std::function的实例可以对任何可以调用的目标实体进行存储.复制.和调用操作,这些目标实体包括普通函数.Lambda表达式.函数指 ...

  6. C++——包装器std::function与绑定器std::bind

    C++--包装器std::function与绑定器std::bind 1.可调用对象的包装器 std::function是可调用对象的包装器.它是一个类模板,可以容纳除了类成员(函数)指针之外的所有可 ...

  7. C++11 std::bind std::function 高级用法

    C++11 std::bind std::function 高级用法 (c++11的新特性) 原文:https://blog.csdn.net/yangjie6898862/article/detai ...

  8. C++中std::function和std::bind

    1.可调用对象 可调用对象有一下几种定义: 是一个函数指针,参考 C++ 函数指针和函数类型: 是一个具有operator()成员函数的类的对象: 可被转换成函数指针的类对象: 一个类成员函数指针: ...

  9. callable object与新增的function相关 C++11中万能的可调用类型声明std::function...

    在c++11中,一个callable object(可调用对象)可以是函数指针.lambda表达式.重载()的某类对象.bind包裹的某对象等等,有时需要统一管理一些这几类对象,新增的function ...

最新文章

  1. 《预训练周刊》第25期:HyperCLOVA:数十亿级韩语生成式预训练变换器、GPT-3在生物医学领域不是好的小样本学习器...
  2. vs编译idl文件_Unity中 .asmdef文件的作用
  3. Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组
  4. SpringCloud的GateWay网关中怎么debug得到真实的路由地址
  5. 触动精灵mysql用法_[触动精灵]触动精灵官方手册流水账2
  6. 【leetcode】复写零
  7. TFS -- 使用手记 (更新2009/12/3)
  8. 08-05-09pe_xscan 增加IE版本检测
  9. chrome强烈推荐安装Octotree插件
  10. apicloud访问php,支付宝 app应用 受权 php + APICloud
  11. 我的世界服务器皮肤修改,万用皮肤补丁CustomSkinLoader
  12. 系统管理、系统安全命令
  13. 一个女孩写给女孩的话
  14. 金弘同创教育是真的:拼多多店铺如何可以做好
  15. SAP全球副总裁、中国区总经理李强,离职去向大家就不要猜了
  16. 树莓派与Arduino串口通讯获取DH11温湿度
  17. 最不常用置换算法LFT 最久未使用置换算法LRU 操作系统 C语言链表实现
  18. python模型转PMML
  19. HTML5源码-实现一个简单的个人主页
  20. 双色球号码自动生成系统-------买彩票不愁啦

热门文章

  1. linux下的usb抓包方法【转】
  2. html input不可编辑
  3. socket编程:I/O模型
  4. web网站加速之CDN(Content Delivery Network)技术原理
  5. Linux命令之route - 显示和操作IP路由表
  6. 输入空格hdu - 1010 - Tempter of the Bone
  7. SEO查询指令,非常值得你收藏!
  8. 24个为Web开发人员准备的CSS3实用教程
  9. 目录树结构改变后刷新目录树
  10. editplus 3 注册码