cocos2dx3.2 C++再谈谈函数指针的简单使用

cocos2dx3.2 C++再谈谈函数指针的简单使用,第1张

概述一般情况: void showMsg(float) {     cout << "show msg normal" << endl; } void (*p)(float); 然后这样调用:     p = showMsg;     p(1.1f); 如果用于函数传递参数,这样就不是很方便使用了,于是有了下面这种: typedef void (*p1)(float);     p1 p1my = s

一般情况:

voID showMsg(float)

{

cout << "show msg normal" << endl;

}


voID (*p)(float);

然后这样调用:

p = showMsg;

p(1.1f);

如果用于函数传递参数,这样就不是很方便使用了,于是有了下面这种:

typedef voID (*p1)(float);

p1 p1my = showMsg;

p1my(1.0f);


上面是一般的情况,那么如何指向类成员的成员函数呢?

看下:

class Student

{

public:

voID showMsg(float);

};

voID Student::showMsg(float)

{

cout << "show msg in the Student Class" << endl;

}

typedef voID (Student::*ps)(float);

使用如下:

Student s;

ps pstudent = &Student::showMsg;

(s.*pstudent)(2.0f);

好了,我们已经知道了,函数指针的简单使用,那么我大概模仿下cocos2dx3.2里面的

SEL_SCHEDulE的使用:

首先,定义Node节点,这个我随便写的

class Node

{

public:

static Node* create();

voID autorelease();

protected:

Node();

virtual bool init();

virtual ~Node();

};


voID Node::autorelease()

{

delete this;

}



Node* Node::create()

{

auto sp = new Node();

if(sp && sp->init())

{

}

else

{

delete sp;

}

return sp;

}


Node::Node()

{

}

Node::~Node()

{

cout << "the Node is destructed" << endl;


}


bool Node::init()

{

return true;

}




typedef voID (Node::*SEL_SCHEDulE)(float);


#define schedule_selector(_SELECTOR) static_cast<SEL_SCHEDulE>(&_SELECTOR)


接下来再定义一个类Player,继承Node:

class Player : public Node

{

public:

static Player* create();

voID show(float dt);



protected:

Player();

virtual ~Player();

virtual bool init();

};


voID Player::show(float dt)

{

cout << "player show class" << endl;

}



Player::Player()

{

}

Player::~Player()

{

cout << "the player is destructed" << endl;

}



Player* Player::create()

{

auto sp = new Player();

if(sp && sp->init())

{

}

else

{

delete sp;

}

return sp;

}


bool Player::init()

{

SEL_SCHEDulE sel = schedule_selector(Player::show);

(this->*sel)(3.0f);


return true;

}



然后再main函数这样使用:

int main()

{

auto sp = Player::create();

SEL_SCHEDulE sel = schedule_selector(Player::show);

// SEL_SCHEDulE sel = static_cast<SEL_SCHEDulE>(&Player::show); //这种方式也是可以的

(sp->*sel)(2.2);

sp->autorelease();

return 0;

}


哎,上面这种是再外面使用,但是cocos2dx3.2是再里面调用的,其实使用也是蛮简单的,看下:

比如我要再Player::init函数中调用:

boolPlayer::init()

{

SEL_SCHEDulEsel =schedule_selector(Player::show);

(this->*sel)(3.0f);

returntrue;

}

好了到此结束吧.

总结

以上是内存溢出为你收集整理的cocos2dx3.2 C++再谈谈函数指针的简单使用全部内容,希望文章能够帮你解决cocos2dx3.2 C++再谈谈函数指针的简单使用所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存