Cocos2d-x3.1回调函数的定义CCRef.h声明。源代码,例如,下面的:

typedef void (Ref::*SEL_CallFunc)();
typedef void (Ref::*SEL_CallFuncN)(Node*);
typedef void (Ref::*SEL_CallFuncND)(Node*, void*);
typedef void (Ref::*SEL_CallFuncO)(Ref*);
typedef void (Ref::*SEL_MenuHandler)(Ref*);
typedef void (Ref::*SEL_SCHEDULE)(float); #define callfunc_selector(_SELECTOR) static_cast<cocos2d::SEL_CallFunc>(&_SELECTOR)
#define callfuncN_selector(_SELECTOR) static_cast<cocos2d::SEL_CallFuncN>(&_SELECTOR)
#define callfuncND_selector(_SELECTOR) static_cast<cocos2d::SEL_CallFuncND>(&_SELECTOR)
#define callfuncO_selector(_SELECTOR) static_cast<cocos2d::SEL_CallFuncO>(&_SELECTOR)
#define menu_selector(_SELECTOR) static_cast<cocos2d::SEL_MenuHandler>(&_SELECTOR)
#define schedule_selector(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)

实际上。这是函数指针的应用。

以下使用一个简单的样例来说明函数指针的使用:

typedef void (*p)(int i);
void func(int i)
{
printf("%d\n",i);
}
p = func; p(1);

通过typedef定义了新类型p,p是一个函数指针,函数的參数有一个int值。返回void,p指针能够指向这种函数。函数名即是一个指针,所以p直接等于func,然后p(1),运行

通过这个样例能够发现。Cocos2d-x的回调函数也是这个道理。首先定义了6个函数指针类型。仅仅能指向Ref类的成员函数。然后定义一个定义宏定义,调用这些函数指针。这些宏定义是通过回调对象的CC_Callback_来回调,以下讲一个小样例。

#include <iostream>  //callBack.h
using namespace std;
//定义一个基类
class Person
{
public:
void print(string name);//定义基类方法
};
//typedef一个函数指针类型
typedef void(Person::*SEL_CallFun)(string str );
//定义一个派生类
class Student : public Person
{
private:
string m_name;
int m_age;
public:
Student(string name ,int age);
~Student(); void callBack(string str);//定义一个回调函数
void result();//打印结果
protected:
Person* m_pListen;//回调函数的运行对象
SEL_CallFun m_pfnSelectior;//回调函数指针
};

#include "CallBack.h"  //callBack.cpp
//定义一个基类
void Person::print(string name)
{
cout << name << endl;
} Student::Student(string name ,int age)
{
this->m_name = name;
this->m_age = age;
} Student::~Student()
{ } void Student::result()
{
cout << "Hi this is a student" << endl; m_pfnSelectior = (SEL_CallFun)(&Student::callBack);//先将子类的回调函数转成函数指针 m_pListen = this;//运行对象是this m_pListen->print(m_name);//首先运行父类的print函数 (m_pListen->*m_pfnSelectior)(m_name);//运行回调函数,即子类的callBack函数
} void Student::callBack(string str)
{
cout << "My name is" << str << "age is" << m_age << endl;
}
#include <iostream> //main.cpp
#include "CallBack.h"
int main(int argc, const char * argv[])
{ // insert code here...
Student* s = new Student("YXK",20);
s->result();
return 0;
}

通过演示示例Person对象回调函数的子类

Cocos2d-x3.1回调函数具体解释的更多相关文章

  1. C#IAsyncResult异步回调函数的解释

    问题:IAsyncResult ar 是如何通过ar.AsyncState强制转换成TCPClientState类型 答:实例中使用的方法如下 我给IAsyncResult ar传入了TCPClien ...

  2. 如何理解JS回调函数

    1.回调函数英文解释: A callback is a function that is passed as an argument to another function and is execut ...

  3. Python回调函数用法实例详解

    本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...

  4. js中的回调函数的理解和使用方法

    js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...

  5. 【校招面试 之 C/C++】第15题 C 回调函数

    转自:https://segmentfault.com/a/1190000008293902 做略微改动 什么是回调函数 我们先来看看百度百科是如何定义回调函数的: 回调函数就是一个通过函数指针调用的 ...

  6. C回调函数

    转自:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 在面试的时候被问到什么是回调函数,我是属于会用但不懂概念的那类 ...

  7. ajax的回调函数和匿名函数

    1.什么是js回调函数 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为函数实际上 ...

  8. 转·带你用实例理解C语言回调函数

    原文出处:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 前言: 如不懂函数指针,请先查阅关于函数指针内容的资料(h ...

  9. 【转】一文搞懂C语言回调函数

    转:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 什么是回调函数 我们先来看看百度百科是如何定义回调函数的: 回调 ...

随机推荐

  1. OCP读书笔记(3) - 使用RMAN恢复目录

    创建恢复目录 在hndx上创建恢复目录:[oracle@oracle admin]$ export ORACLE_SID=hndx[oracle@oracle admin]$ sqlplus / as ...

  2. BAT笔试试题常见试题总结含答案(持续更新。。。)

    (1)试题例如以下: class A { int a; short b; int c; char d; }; class B { double a; short b; int c; char d; } ...

  3. NET Core 1.0 RC2

    NET Core 1.0 RC2 历险之旅 文章背景:对于.NET Core大家应该并不陌生, 从它被 宣布 到现在已经有1-2年的时间了,其比较重要的一个版本1.0 RC2 也即将发布..Net C ...

  4. java socket 的参数选项解读(转)

    java socket中有很多参数可以选择,这篇博客的目的是沉淀出这些参数的语义和用法,供自己以后查阅. 1.java socket参数选项总览 在JDK1.6中有如下参数选项: 1 public f ...

  5. hdu4405(概率dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意:跳棋有0~n个格子,每个格子X可以摇一次色子,色子有六面p(1=<p<=6), ...

  6. Urban Dictionary: psd

    Urban Dictionary: psd psd Share on twitter Share on facebook Share on more 3 up, 1 down It means Poo ...

  7. UVA 10140 - Prime Distance(数论)

    10140 - Prime Distance 题目链接 题意:求[l,r]区间内近期和最远的素数对. 思路:素数打表,打到sqrt(Max)就可以,然后利用大的表去筛素数.因为[l, r]最多100W ...

  8. Berkeley DB 使用

    http://www.ibm.com/developerworks/cn/linux/l-embdb/index.html UNIX/LINUX平台下的数据库种类非常多,参考资料1中 列举了其中的大部 ...

  9. •当对自己的技术足够自信的时候,拼的就是RP和面试技巧了(转)

    前言 三月真是一个忙碌的季节,刚刚开学就需要准备各种面试和笔试(鄙视).幸运的是,在长达一个月的面试内推季之后,终于同时拿到了阿里和腾讯的offer,还是挺开心的.突而想起久未更新的博客,就冒昧学一学 ...

  10. Extjs4.0.7 实现Grid的嵌套

    网上相关资料非常少,我看过的大多是Extjs 3.0 急以前版本的解决方案. 比如:http://mikhailstadnik.com/ext/examples/nested-grid.htm  (E ...