cocos3.x之C++11新特性

cocos3.x之C++11新特性,第1张

概述http://www.voidcn.com/article/p-qmdcjoko-sw.html    Cocos2dx是用C++11编写的,由于之前工作中并没有用到这部分。这里对C++11新特性在Cocos2dx中使用较多的地方做一下归纳。 C++11FAQ:http://www.stroustrup.com/C++11FAQ.html 一、新的关键字及语法 nullptr:用来代替NULL,n

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__)
2.std::thread

Cocos2dx引擎的核心仍然是一个单线程的死循环(UI线程),在处理一些比较耗时的工作,如网络通信,纹理资源,音视频资源等,为防止界面出现卡顿,最好还是另开线程(Worker线程)。而在3.2的版本中并未发现pthread的支持,原来是C++11的标准库中已经有了std::thread。下面给出一个简单示例:

boolHelloWorld::init() if(!Layer::init()) false; } std::threadt1(&HelloWorld::myThread,this);//创建一个分支线程,回调到myThread函数里 t1.join(); //t1.detach(); log("inmajorthread");//在主线程 true; voIDHelloWorld::myThread() { log("inmythread"); C++11中还有很多其他的新特性,如右值引用与move语义,std::move,无序容器(unordered_map...),初始化列表等;想更深入的了解请查看c++11FAQ 总结

以上是内存溢出为你收集整理的cocos3.x之C++11新特性全部内容,希望文章能够帮你解决cocos3.x之C++11新特性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1037498.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存