http://www.jb51.cc/article/p-qmdcjoko-sw.html
Cocos2dx是用C++11编写的,由于之前工作中并没有用到这部分。这里对C++11新特性在Cocos2dx中使用较多的地方做一下归纳。
C++11FAQ:http://www.stroustrup.com/C++11FAQ.html
一、新的关键字及语法 nullptr:用来代替NulL,nullptr是强类型,防止出现一些二义性[cpp] view plain copy voIDf(int);//#1 char*);//#2 //C++03 f(0);//二义性 //C++11 f(nullptr)//无二义性,调用f(char*)
auto:根据上下文自动类型推导,(在使用STL时非常方便),(decltype与此相反,从变量或表达式中获取类型)
boolAppDelegate::applicationDIDFinishLaunching(){ //initializedirector autodirector=Director::getInstance();//Director* autoglvIEw=director->getopenGLVIEw();//GLVIEw* ... }
overrIDe:派生类重写基类的虚函数时,在函数的声明中加上overrIDe(非必须),这样可在编译时检测出对基类函数的错误重写
structB{ virtualvoIDf(); voIDg()const; voIDh(char); voIDk();//notvirtual }; structD:B{ voIDf()overrIDe;//OK:overrIDesB::f() voIDg()overrIDe;//error:wrongtype char);//overrIDesB::h();likelywarning voIDk()overrIDe;//error:B::k()isnotvirtual }; final:可用来修饰基类的虚函数,表示该函数不可被派生类重写即overrIDe voIDf()constfinal;//donotoverrIDe voIDg(); structD:B{ const;//error:D::fattemptstooverrIDefinalB::f voIDg();//OK };
range for:只要定义了begin(),end()即有iterator
voIDf(vector<double>&v) { for(autox:v)cout<<x<<'\n'; for(auto&x:v)++x;//usingareferencetoallowustochangethevalue }
lambad表达式:主要应用时标书某些具有简单行为的函数,(cocos2dxz中常用)
autoontouchEvent=[&](EventListener*l)->bool{//Returntruetobreak EventListenertouchOneByOne*Listener=static_cast<EventListenertouchOneByOne*>(l); //SkipiftheListenerwasremoved. if(!Listener->_isRegistered) returnfalse; event->setCurrentTarget(Listener->_node); 二、标准库
1.std::function与std::bind
std::function :可以定义类似函数指针的类型
std:bind:可以方便的绑定类的成员函数
这个常在cocos2dx中的回调函数中使用
std::function<voID(conststd::vector<touch*>&,Event*)>ontouchesBegan; std::function<std::function<
//newcallbacksbasedonC++11 #defineCC_CALLBACK_0(__selector__,__target__,...)std::bind(&__selector__,##__VA_ARGS__) #defineCC_CALLBACK_1(__selector__,std::placeholders::_1,##__VA_ARGS__) #defineCC_CALLBACK_2(__selector__,std::placeholders::_2,108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:18.461538314819336px; margin:0px!important; padding:0px 3px 0px 10px!important"> #defineCC_CALLBACK_3(__selector__,std::placeholders::_3,##__VA_ARGS__) Cocos2dx引擎的核心仍然是一个单线程的死循环(UI线程),在处理一些比较耗时的工作,如网络通信,纹理资源,音视频资源等,为防止界面出现卡顿,最好还是另开线程(Worker线程)。而在3.2的版本中并未发现pthread的支持,原来是C++11的标准库中已经有了std::thread。下面给出一个简单示例: bool
2.std::thread
以上是内存溢出为你收集整理的cocos3.x之C++11新特性全部内容,希望文章能够帮你解决cocos3.x之C++11新特性所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)