位置: 编程技术 - 正文

【cocos2dx】std::function与std::bind 函数指针(cocos-2dx)

编辑:rootadmin

推荐整理分享【cocos2dx】std::function与std::bind 函数指针(cocos-2dx),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2dx怎么用,cocos2d怎么用,cocos2d socket,cocos2d怎么用,cocos2djs,cocos2d schedule,cocos2djs,cocos2djs,内容如对您有帮助,希望把文章链接给更多的朋友!

函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

函数指针的声明方法为:返回&#;类型 ( * 指针变量名) ([形参列表]);注1:“返回&#;类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:int func(int x); /* 声明一个函数 */int (*f) (int x); /* 声明一个函数指针 */f=func; /* 将func函数的首地址赋给指针f */或者使用下面的方法将函数地址赋给函数指针:f = &fun;赋&#;时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋&#;以后,指针f就指向函数func(x)的代码的首地址。注2:函数括号中的形参可有可无,视情况而定。下面的程序说明了函数指针调用函数的方法:例一、

ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的&#;,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有&#;&#;和--运算,用时要小心。不过,在某些编译器中这是不能通过的。这个例子的补充如下。应该是这样的:1.定义函数指针类型:typedef int (*fun_ptr)(int,int);2.声明变量,赋&#;:fun_ptr max_func=max;也就是说,赋给函数指针的函数应该和函数指针所指的函数原型是一致的。例二、

上面是介绍函数指针。

下面介绍 std::function与std::bind 函数指针

function模板类和bind模板函数,使用它们可以实现类&#;函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类 的非静态成员函数时。std::function可以绑定到全局函数/类静态成员函数(类静态成员函数与全局函数没有区别),如果要绑定到类的非静态成员函数,则需要使用std::bind。

同时,std::bind绑定到虚函数时会表现出多态行为。

转自: 函数指针

又找到了如下的内容:

//========================================================

【cocos2dx】std::function与std::bind  函数指针(cocos-2dx)

下文地址:

本篇的主题就是揭露CC_CALLBACK 与 std::bind之间不可告人的秘密......

首先看一段代码:

三个回调函数的实现:

整个过程就是boy“勾引”girl1,但girl1显然对异性兴趣不大,于是她也勾引girl2......可是,girl2对同性异性都没兴趣,她只是淡淡的说了句:CC_CALLBACK到底是什么?,调试如图:

好吧,先让我回口血,然后再来回答girl2的问题:CC_CALLBACK到底是什么碗糕(东东)?我们先进CC_CALLBACK源码里看看:

看完后恍然大悟!不看不知道,一看...和没看一样...这里主要注意两点:一是 std::bind,二是##_VA_ARGS_; ##_VA_ARGS_是可变参数宏,我就不多说了。重点讲的是std::bind。std::bind是在C&#;&#; 里新加入的成员。可以将bind函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表.调用bind的一般形式为:auto newCallback = bind(callback,arg_list);其中,newCallback是一个可调用对象,arg_list是可以用逗号分隔的参数列表,至于是啥参数,那就看callback函数里有啥参数啦。也就是说,当我们调用newCallback时,newCallback会调用函数callback,并传递参数arg_list给callback.看完上面的内容你的理解可能还比较模糊,那直接来个例子:有一个函数callback,如下,下面我们用bind来调用callback

“_1″是一个占位符对象,用于表示当函数callback通过函数newCallback进行调用时,函数newCallback的第一个参数在函数callback的参数列表中的位置。第一个参数称为”_1″, 第二个参数为”_2″,依此类推,有意思吧。至于‘1.5’是指默认参数,它处于_1和_2的后面,所以它就是double类型的参数了.在强调一点就是:_1这类占位符都定义在一个名为placeholders的命名空间中,而这个命名空间本身定义在std的命名空间中。为了使用这些名字,两个命名空间都要写上,如:

std::placeholders::_1;

这样编写&#;麻烦,所以在要使用_1时,可以加上这么一句:using namespace namespace_name; 恩,ok

恩,bind就介绍到这,讲的比较浅,不理解的可以百度研究下。最后再回过头来看下CC_CALLBACK的定义,是不是清晰多了?最后在举个例子吧,还是之前的boy,girl1,girl2,只是他们之间传递“爱意”的方式要换下了。不用CC_CALLBACK,改用std::bind。代码如下 :

恩,就是这样子了。bind与CC_CALLBACK之间的关系就是这么的...简单。

尊重原创,转载请注定来自star特:

cocos2dx代码调用本地浏览器步骤详解 1.找到ndk路径/sources/cocos2dx/platform/android/CCApplication.h添加方法voidopenURL(constchar*pszUrl);2找到ndk路径/sources/cocos2dx/platform/android/CCApplication.cpp实现方法voidCCAppli

【cocos2d-x】cocos2dx之截图保存 游戏过程中,偶尔需要截图和保存图片,但是cocos2d-x本身对这方面的支持比较少,所以只能用比较特殊的方法来保存~RenderTextureRenderTexture是一个通用渲

Cocos2dx 3.0 实战之—— 重写《超级马里奥》其八 主菜单界面 一切之前还是说抱歉,因为本人的确实不会搞美工做的事情,所以素材的图片丑的要死。先看此界面的效果:然后源码是:MenuScene.h/***主菜单场景的声明*

标签: cocos-2dx

本文链接地址:https://www.jiuchutong.com/biancheng/372615.html 转载请保留说明!

上一篇:Coco2dx 游戏项目接入SDK时遭遇C/C++ 与 Object-C混编,此时该怎么办?(cocos2dx游戏)

下一篇:cocos2dx代码调用本地浏览器步骤详解(cocos2djs教程)

  • SQL注入全过程深入分析(sql注入的原理和步骤)

    直接通过Google浏览器就能去除。

    点击登录,返回的信息如下:

    Conversion failed when converting the nvarchar value 'master' to data type int.

    数据库名称“master”通过异常被显示出来!依次改变上面SQL语句中的序号,

    就能得到服务器上所有数据库的名称。

    接着,输入信息如下:

    得到返回信息如下:

    Conversion failed when converting the nvarchar value 'spt_fallback_db' to data type int.

    我们得到了master数据库中的第一张表名:“spt_fallback_db”,

    同上,依次改变序号,可得到该库全部表名。

    现在我们以“spt_fallback_db”表为例,尝试获取该表中所有的字段名。在输入框中输入以下代码:

    于是,得到错误提示如下:

    "Conversion failed when converting the nvarchar value 'xserver_name' to data type int." class="img-responsive" alt="SQL注入全过程深入分析(sql注入的原理和步骤)">

    SQL注入全过程深入分析(sql注入的原理和步骤)

  • 将MSSQL Server 导入/导出到远程服务器教程的图文方法分享(sqlserver导出mysql)

    将MSSQL Server 导入/导出到远程服务器教程的图文方法分享(sqlserver导出mysql)

  • 光盘安装OpenBSD3.6的方法(光盘安装系统怎么操作)

    光盘安装OpenBSD3.6的方法(光盘安装系统怎么操作)

  • windows 下修改网卡MAC地址(windows怎么更改网络状态)

    windows 下修改网卡MAC地址(windows怎么更改网络状态)

  • CentOS下安装perl编程语言教程(centos 安装perl)

    CentOS下安装perl编程语言教程(centos 安装perl)

  • 在CentOS中制作BGP路由的教程(centos做bond4)

    在CentOS中制作BGP路由的教程(centos做bond4)

  • 在Linux下HTTPie工具的使用教程

    在Linux下HTTPie工具的使用教程

  • Unity3D协同程序(unity3d协程的作用)

    Unity3D协同程序(unity3d协程的作用)

  • WEB前端开发都应知道的jquery小技巧及jquery三个简写(web前端开发应届生简历)

    WEB前端开发都应知道的jquery小技巧及jquery三个简写(web前端开发应届生简历)

  • 定金冲抵货款怎么做分录
  • 小规模纳税人增值税减免账务处理
  • 税费退库怎么做凭证
  • 销售费用计入产品生产成本吗
  • 超过认证期限的发票未抵扣能红冲吗
  • 自然灾害导致的车损可以理赔嘛
  • 生产过程中报废怎么核算成本
  • 免抵退附加
  • 业务招待费记账凭证摘要
  • 公司股东可以自己买保险吗
  • 独立核算的生产车间是法律主体吗
  • 化肥贸易需要什么手续
  • 银行汇兑计入哪个会计科目?
  • 个人独资的企业性质是什么
  • 财务会计中的费用
  • 购入赠品计入什么科目
  • 在建工程暂估入库的账务处理
  • 制造费用和劳务成本
  • 一般纳税人交的增值税可以抵扣吗
  • 高新企业研发项目
  • 企业分立账务处理办法
  • 缴纳房产税怎么办理登记手续
  • win11怎么改名
  • 小规模企业没有成本票怎么办
  • linux怎样使用
  • 股份支付有哪些基本类型
  • php轻松入门视频教程
  • 发财树的养殖方法和浇水视频
  • 计提摊销的分录
  • 触屏不灵敏怎么调整oppo
  • 未开票收入本月未收款的分录
  • service iptables save
  • ip6tables-restore命令 还原ip6tables表
  • dir命令linux
  • 子公司使用母公司固定资产
  • 上缴税金怎么算税额
  • 企业所得税没有交
  • 累计盈余需要设置明细科目吗
  • 红字发票信息表怎么打印出来
  • 税控盘的作用是什么
  • mysql金额用什么数据类型
  • 季报现金流量表可以不填吗
  • 出口不报关账务处理
  • 进项税转出怎么交税
  • 以前年度损失如何记账
  • 个税起征点调整最新消息
  • 政府投资资产会计核算科目
  • 没计提的税费怎么处理
  • 业务提成需要缴纳个人所得税吗?
  • 法人能去税务局开个人发票吗
  • 固定资产报废由谁审批
  • 没有销货清单的发票可以报销吗
  • 社会医疗保险机构名词解释汇总
  • 坏账损失的核算方法包括
  • freebsd 升级
  • unins000.exe - unins000是什么意思
  • linux系统中的文件
  • windows 10激活不了
  • mac修改dns设置
  • ct.dll
  • winxp开启远程控制
  • win7怎么自启动程序
  • windows7的word
  • windows10不能在任务栏进行的操作
  • Win10 Mobile 10586.164中文版升级截图曝光
  • nodejss
  • 测试下载速度很快,实际下载很慢
  • 希尔排序数据结构的代码
  • jquery点击按钮跳转页面
  • github上有什么
  • three.js入门教程(合集)
  • unity3d 赛车游戏
  • javascript面向对象编程指南第三版
  • 以下关于android应用程序的目录结构描述中,不正确的是
  • 增值税0申报操作流程
  • 江西国税局电子税务局
  • 外经证预缴税款网上流程
  • 税务催告期限多久
  • 办理对外支付税务备案需要多久时间
  • 境外付款需要什么手续
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设