std::function介绍

类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。std::function对象是对C++中现有的可调用实体的一种类型安全的包裹(我们知道像函数指针这类可调用实体,是类型不安全的)。

通常std::function是一个函数对象类,它包装其它任意的函数对象,被包装的函数对象具有类型为T1, …,TN的N个参数,并且返回一个可转换到R类型的值。std::function使用 模板转换构造函数接收被包装的函数对象;特别是,闭包类型可以隐式地转换为std::function

最简单的理解就是:

   通过std::function对C++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function对象;让我们不再纠结那么多的可调用实体。一切变的简单粗暴。 

#include <functional>
#include <iostream>
using namespace std;std::function< int(int)> Functional;// 普通函数
int TestFunc(int a)
{return a;
}// Lambda表达式
auto lambda = [](int a)->int{ return a; };// 仿函数(functor)
class Functor
{
public:int operator()(int a){return a;}
};// 1.类成员函数
// 2.类静态函数
class TestClass
{
public:int ClassMember(int a) { return a; }static int StaticMember(int a) { return a; }
};int main()
{// 普通函数Functional = TestFunc;int result = Functional(10);cout << "普通函数:"<< result << endl;// Lambda表达式Functional = lambda;result = Functional(20);cout << "Lambda表达式:"<< result << endl;// 仿函数Functor testFunctor;Functional = testFunctor;result = Functional(30);cout << "仿函数:"<< result << endl;// 类成员函数TestClass testObj;Functional = std::bind(&TestClass::ClassMember, testObj, std::placeholders::_1);result = Functional(40);cout << "类成员函数:"<< result << endl;// 类静态函数Functional = TestClass::StaticMember;result = Functional(50);cout << "类静态函数:"<< result << endl;return 0;
}

std::function 最大的用处是函数回调;

C++11: std::function<void()> func相关推荐

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

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

  2. c++ 函数当参数传参,类函数当参数传参,匿名函数当参数传参,function<void()>

    函数传参 一.在URDriver类中调用其它类中的匿名函数 使用function<void()>接收(通过传函数的方式) 1.1 定义一个类URDriver,类中定义一个接收函数的成员 f ...

  3. Boost:测试bind <void>

    Boost:测试bind 实现功能 C++实现代码 实现功能 boost::bind模块,测试bind C++实现代码 #include <boost/config.hpp> #if de ...

  4. C++11新特性之std::function<>

    转自http://www.jellythink.com/archives/771 看下面这两行代码: std::function<void(EventKeyboard::KeyCode, Eve ...

  5. 【C++】C++11的std::function和std::bind用法详解

    在设计回调函数的时候,无可避免地会接触到可回调对象.在C++11中,提供了std::function和std::bind两个方法来对可回调对象进行统一和封装. 可调用对象 C++中有如下几种可调用对象 ...

  6. C++11 FAQ中文版:std::function 和 std::bind

    std::function 和 std::bind 标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数.bind()接受一个函数(或者 ...

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

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

  8. std::make_unique<T>和std::make_shared<T>

    更建议使用:std::make_unique<T>构造unique_ptr对象:std::make_shared<T>构造shared_ptr对象 std::make_shar ...

  9. c++的*号是否有空格的区别以及char*转std::vector<float>解析

    文章目录 一.前言 二.正文 1.*带不带空格的区别 2.char*和char** 3.关于指针运算 4.char指针转std::vector<float> 解析 (1)const cha ...

最新文章

  1. 与guacamole服务器的网络不稳定,Apache Guacamole安全漏洞影响数千万用户 - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com...
  2. php fetchall 返回值为0_PHP实现延迟执行程序
  3. Office转PDF,Aspose太贵,怎么办?
  4. input框自动填充内容背景颜色为黄色解决方法
  5. python读取log文件生成图形表_python提取log文件内容并画出图表
  6. 看完就懂webpack打包原理
  7. golang微服务框架对比_最强开源微服务框架,全网独家整理
  8. python的类是什么_Python类(class)
  9. vue项目多主题风格切换(适配暗黑模式)
  10. 一套PumpLinx泵阀仿真分析攻略
  11. 绕过查杀工具实现lsass转储
  12. 如何在电脑/手机上将HTML文件转换为PDF?
  13. 【学术 | 比赛】比赛?论文?先收藏!29个学术网站,比赛论文不再困难
  14. 30个免费的CSS3动画片段代码
  15. iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destinatio
  16. android手机存储全面解析汇总
  17. 冬季到吉林来玩雪|史上最全的吉林冬季旅游攻略!
  18. 辞职的理由,似乎大家都说不是为了钱
  19. 企业使用虚拟码号的优势!
  20. python 字符串转16进制数字

热门文章

  1. (转)Linux环境变量的设置和查看方法
  2. SQL Server2005设置sa登录名
  3. kali linux 设置固定IP地址步骤
  4. SQL注入_1-6_user-agent注入
  5. LeetCode Algorithm 746. 使用最小花费爬楼梯
  6. 下面关于“栈”的描述,正确的是( )
  7. Netty实战 IM即时通讯系统(七)数据传输载体ByteBuf介绍
  8. 大数据WEB阶段总结
  9. 【前端4】bootstrap:栅格系统,隔行/触摸换色,分页/导航条,模态框/轮播图,旅游首页
  10. 【Qt】Qt布局管理器