C++11 std::function用法(对cocos2d-x 3.2 中lambda的部分认识)
2014-08-22 15:03
489 查看
原文来自:http://www.hankcs.com/program/cpp/c11-std-function-usage.html
在看Cocos2d-x的范例代码时,随处可见“很奇怪”的语法:
其中CL是一个宏,对应如下lambda表达式:
还算好懂,感觉是个工厂模式,同时用宏模拟了接口。
但是这个std::function<Layer*()>却让我少见多怪了,翻开第五版《C++ Primer》,才知道原来是C++11的新特性——可调用对象模板类。一句话说明问题,std::function<Layer*()>代表一个可调用对象,接收0个参数,返回Layer*。
至于function的深入理解,还是用代码说明吧。
如上所示,function可以将普通函数,lambda表达式和函数对象类统一起来。它们并不是相同的类型,然而通过function模板类,可以转化为相同类型的对象(function对象),从而放入一个map里。
另外我实际测试的结果来看,在VS2013编译器下,上述代码可以通过,而第五版《C++ Primer》第512页第一行所言“错误:mod不是一个函数指针”并没有发生错误,有可能是对C++11标准的不同实现吧。
自从学了C++11和Java8,再也不怕同事看懂我的代码啦~
在看Cocos2d-x的范例代码时,随处可见“很奇怪”的语法:
但是这个std::function<Layer*()>却让我少见多怪了,翻开第五版《C++ Primer》,才知道原来是C++11的新特性——可调用对象模板类。一句话说明问题,std::function<Layer*()>代表一个可调用对象,接收0个参数,返回Layer*。
至于function的深入理解,还是用代码说明吧。
另外我实际测试的结果来看,在VS2013编译器下,上述代码可以通过,而第五版《C++ Primer》第512页第一行所言“错误:mod不是一个函数指针”并没有发生错误,有可能是对C++11标准的不同实现吧。
自从学了C++11和Java8,再也不怕同事看懂我的代码啦~
![](http://img.baidu.com/hi/tsj/t_0003.gif)
相关文章推荐
- c++11特性与cocos2d-x 3.0之std::bind与std::function
- c++11特性与cocos2d-x 3.0之std::bind与std::function
- C++11 笔记 std::function,bind绑定器和lambda
- C++11新特性之二——std::bind std::function 高级用法
- C++11 中std::function和std::bind的用法
- C++11 std::bind std::function 高级用法
- C++11 std::bind std::function 高级用法
- c++11特性与cocos2d-x 3.0之std::bind与std::function
- C++11 中std::function和std::bind的用法
- 【很nice的一篇文章】c++11特性与cocos2d-x 3.0之std::bind与std::function
- C++11 std::bind std::function 高级用法
- c++11特性与cocos2d-x 3.0之std::bind与std::function
- c++11特性与cocos2d-x 3.0之std::bind与std::function
- C++11 std::function用法
- c++11特性与cocos2d-x 3.0之std::bind与std::function
- C++11 中std::function和std::bind用法详解
- C++11中的std::function,Lambda表达式
- [cocos2d-x3.x学习笔记]lambda表达式 std::function CC_CALLBACK_ 事件回调实现
- c++11特性与cocos2d-x 3.0之std::bind与std::function
- c++11特性与cocos2d-x 3.0之std::bind与std::function