C++11中的std::function
来源:互联网 发布:局域网即时通信软件 编辑:程序博客网 时间:2024/04/27 21:01
C++11中的std::function
看看这段代码
先来看看下面这两行代码:
这两行代码是从Cocos2d-x中摘出来的,重点是这两行代码的定义啊。std::function
这是什么东西?如果你对上述两行代码表示毫无压力,那就不妨再看看本文,就当温故而知新吧。
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
对象;让我们不再纠结那么多的可调用实体。一切变的简单粗暴。
怎么使用std::function
使用std::function
的感觉就是“万众归一”,下面就通过实际的代码例子,看看究竟怎么使用std::function
。会使用了才是王道。
对于各个可调用实体转换成std::function
类型的对象,上面的代码都有,运行一下代码,阅读一下上面那段简单的代码。总结了简单的用法以后,来看看一些需要注意的事项:
- 关于可调用实体转换为
std::function
对象需要遵守以下两条原则:- 转换后的
std::function
对象的参数能转换为可调用实体的参数; - 可调用实体的返回值能转换为
std::function
对象的返回值。
- 转换后的
std::function
对象最大的用处就是在实现函数回调,使用者需要注意,它不能被用来检查相等或者不相等,但是可以与NULL或者nullptr进行比较。
为什么要用std::function
好用并实用的东西才会加入标准的。因为好用,实用,我们才在项目中使用它。std::function
实现了一套类型消除机制,可以统一处理不同的函数对象类型。以前我们使用函数指针来完成这些;现在我们可以使用更安全的std::function
来完成这些任务。
还有为什么?我也不知道还有为什么?等以后发现了更好的实际应用实例再回来说为什么吧。
总结
C++11的加入,貌似让C++变了一个语言似的,也有了Lambda表达式,好多东西都要去学习,好多新的语言特性。哦,慢慢来吧。
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function
- C++11中的std::function,Lambda表达式
- C++11:std::function
- C++11 学习笔记 std::function和bind绑定器
- C++11 笔记 std::function,bind绑定器和lambda
- 绝对地址赋值
- 分布式消息系统:Kafka
- 【Java基础】Number类
- 笔记——Activity启动模式
- VS2013 strcpy 报错的3种处理方法
- C++11中的std::function
- shell校验IP地址合法性
- Myeclipse导入包后报错红色叉,报错如下信息:Target runtime Apache Tomcat v6.0 is not defined
- 机器学习常见算法个人总结
- 【Linux】线程安全与可重入函数
- 图像处理学习笔记之图像的几何变换(2)平移变换
- Java笔记——2017年3月3日
- 指针数组和数组指针
- mysql用户表