Cocos2dx3.2学习准备(一):C++11新特性
Cocos2dx是用C++11编写的,由于之前工作中并没有用到这部分。这里对C++11新特性在Cocos2dx中使用较多的地方做一下归纳。
C++11FAQ:http://www.stroustrup.com/C++11FAQ.html
一、新的关键字及语法
nullptr:用来代替NULL,nullptr是强类型,防止出现一些二义性
void f(int); //#1
void f(char *);//#2
//C++03
f(0); //二义性
//C++11
f(nullptr) //无二义性,调用f(char*)
auto:根据上下文自动类型推导,(在使用STL时非常方便), (decltype与此相反,从变量或表达式中获取类型)
bool AppDelegate::applicationDidFinishLaunching() {// initialize directorauto director = Director::getInstance(); // Director*auto glview = director->getOpenGLView(); // GLView*...
}
override:派生类重写基类的虚函数时,在函数的声明中加上override(非必须), 这样可在编译时检测出对基类函数的错误重写
struct B {virtual void f();virtual void g() const;virtual void h(char);void k(); // not virtual
};
struct D : B {void f() override; // OK: overrides B::f()void g() override; // error: wrong typevirtual void h(char); // overrides B::h(); likely warningvoid k() override; // error: B::k() is not virtual
};
final:可用来修饰基类的虚函数,表示该函数不可被派生类重写即override
struct B {virtual void f() const final; // do not overridevirtual void g();
};struct D : B {void f() const; // error: D::f attempts to override final B::fvoid g(); // OK
};
range for:只要定义了begin(), end()即有iterator
void f(vector<double>& v)
{for (auto x : v) cout << x << '\n';for (auto& x : v) ++x; // using a reference to allow us to change the value
}
lambad表达式:主要应用时标书某些具有简单行为的函数,(cocos2dxz中常用)
auto onTouchEvent = [&](EventListener* l) -> bool { // Return true to breakEventListenerTouchOneByOne* listener = static_cast<EventListenerTouchOneByOne*>(l);// Skip if the listener was removed.if (!listener->_isRegistered)return false;event->setCurrentTarget(listener->_node);...
}
二、标准库
1.std::function与std::bind
std::function :可以定义类似函数指针的类型
std:bind:可以方便的绑定类的成员函数
这个常在cocos2dx中的回调函数中使用
std::function<void(const std::vector<Touch*>&, Event*)> onTouchesBegan;std::function<void(const std::vector<Touch*>&, Event*)> onTouchesMoved;std::function<void(const std::vector<Touch*>&, Event*)> onTouchesEnded;std::function<void(const std::vector<Touch*>&, Event*)> onTouchesCancelled;
// new callbacks based on C++11
#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
#define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
#define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__)
2.std::thread
Cocos2dx引擎的核心仍然是一个单线程的死循环(UI线程),在处理一些比较耗时的工作,如网络通信,纹理资源,音视频资源等,为防止界面出现卡顿,最好还是另开线程(Worker线程)。而在3.2的版本中并未发现pthread的支持,原来是C++11的标准库中已经有了std::thread。下面给出一个简单示例:
bool HelloWorld::init()
{if ( !Layer::init() ){return false;}std::thread t1(&HelloWorld::myThread,this);//创建一个分支线程,回调到myThread函数里t1.join();
//t1.detach();log("in major thread");//在主线程return true;
}void HelloWorld::myThread()
{log("in my thread");
}
C++11中还有很多其他的新特性,如右值引用与move语义,std::move,无序容器(unordered_map...), 初始化列表等;想更深入的了解请查看c++11FAQ
如有错误欢迎指出,希望与Cocos2dx爱好者们多多交流
Cocos2dx3.2学习准备(一):C++11新特性相关推荐
- IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍
文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...
- Java 11 新特性
2019独角兽企业重金招聘Python工程师标准>>> Java 11 新特性 转载于:https://my.oschina.net/u/3764794/blog/2993127
- C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)
2019独角兽企业重金招聘Python工程师标准>>> C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) 首先,让我们来看看以&方式进行变量捕获,同样没有参 ...
- C++11 新特性之std::thread
C++11 新特性之std::thread 原文:https://blog.csdn.net/oyoung_2012/article/details/78958274 从C++11开始,C++标准库已 ...
- C++11新特性之新类型与初始化
C++11新特性之新类型与初始化 snoone | 2016-06-23 11:57 浏览量(148) 评论(0) 推荐(0) 数据 这是C++11新特性介绍的第一部分,比较简单易懂, ...
- Java 11新特性解读
概述 美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!这是自 Java 8 后的首个长期支持版本,将支持到2026年,可以使用下面的 ...
- C++11新特性decltype
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105042574 C ...
- 深入浅出之C++11新特性
1. auto类型赋予新含义 1.1 auto类型定义 在之前的 C++ 版本中,auto 关键字用来指明变量的存储类型,它和 static 关键字是相对的.auto 表示变量是自动存储的,这也是编译 ...
- 《深入理解C++11:C++ 11新特性解析与应用》——导读
前 言 为什么要写这本书 相比其他语言的频繁更新,C++语言标准已经有十多年没有真正更新过了.而上一次标准制定,正是面向对象概念开始盛行的时候.较之基于过程的编程语言,基于面向对象.泛型编程等概念的C ...
- C++11 新特性简介
1.auto auto是旧关键字,在C++11之前,auto用来声明自动变量,表明变量存储在栈,很少使用.在C++11中被赋予了新的含义和作用,用于类型推断. auto关键字主要有两种用途:一是在变量 ...
最新文章
- 一文告诉你,NIPS 2017有多火爆 | 附PPT、视频、代码大总结
- mysql脚本mysql_safe解释、mysql.sock文件、mysql_install_db
- UVA227-Puzzle
- MongoDB数据库(了解MongoDB及基础命令,备份数据库)
- Devexpress xaf针对某个用户登录后在面板中设置导航无效的解决方法
- 微信朋友圈也可以发语音你们造吗?
- 工商银行黄金开户问答题答案
- ITester软件测试小栈长期持续在线征集
- cron java_cron表达式
- iostream, istream 和 ostream的区别
- 解析RocketMQ的消息索引文件consumequeue
- 史上最全的主流CPU性能排名
- 2021【第十二届蓝桥杯省赛】 C/C++ B组(第一场)
- Git创建本地分支并关联远程分支(一)
- javascript常用函数大全
- 千锋重庆IT学习之微信API接口文档
- 12项目管理--项目采购管理
- dnw linux 内核,神器DNW2 FOR LINUX!
- S7-1200PLC 与温控仪表Modbus RTU通信
- PhotoShop学习篇
热门文章
- INCA车载ECU工具软件简介
- Android常用设置
- Learn Git Branching 学习笔记(Git 技术、技巧与贴士集合篇)
- 【前端】微信小程序 内容安全图片校验API imgSecCheck 代码示例 图片违规校验
- 3. Python脚本学习笔记三字符串
- Java代理(静态代理、JDK动态代理、CGLIB动态代理)
- 在计算机中NIC是什么意思?
- 麦吉尔学和ubc计算机专业,申请多伦多、UBC和麦吉尔三所大学建筑专业的作品集要求...
- 推荐一款非常好用的鼠标手势软件StrokeIt
- 谷歌I/O大会发布语言模型LaMDA2,以及更多打开想象力的落地应用