一般情况:
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++再谈谈函数指针的简单使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)