Cocos2dx <基础> 回调函数及相关的语法

<函数指针>

指针: 是一个变量,存储的是内存地址。一个程序运行时所有和运行相关的物件都需要加载到内存中的。函数是存储在内存代码区域中的,函数同样有地址,可以用指针存放函数。

指向函数入口的地址称为函数指针。

int GetSum(int x, int y)
{
	return x+y;
}

int main()
{
//函数指针存放函数地址
int(*p) (int x, int  y);
p = GetSum;
cout << p(2,3) << endl;
 return 0;
}

<回调函数>

使用者自己定义的函数并且实现函数内容,然后将这个函数作为参数传入别人(系统)的函数运行时会调用的函数。

(别人的函数会在运行期间调用你实现的函数),

void Display()
{
	cout << "回调函数" << endl;
}

void Fun(void (*p)())
{
	p();
	cout << "实现回调函数的函数" << endl;
}

int Dop(int x)
{
	return x;
}

void fup(int (*p)(int x))
{
	cout << p(2) << endl;
}

int main()
{
	//无参数
	Fun(Display);
	//带参数
	fup(Dop);
}

<bind>

bind是一种用于函数绑定的模板,对某个函数进行绑定的时候,可以指定部分参数或者全部参数,也可以不指定参数,还可以调整各个参数之间的关系。

对于未指定的参数可以用占位符_1,_2表示。_1表示绑定后的函数的第一个参数,_2表示绑定后的函数的第二个参数。

void Diplay()
{
	cout << "bind函数绑定" << endl;
}

void Dun(int x,int y)
{
	cout << x << endl;
	cout << y << endl;
}

void Du(int& x, int& y)
{
	x++;
	y++;
}

int main()
{
	//无参数
	auto func = bind(Diplay);
	func();
	//有参数,绑定的函数不预先指定的第一个参数
	auto fnp = bind(Dun,placeholders::_1,2);
	fnp(1);
	//有参数,绑定的函数不预先指定的第一个和第二个参数
	auto fgp = bind(Dun,placeholders::_1,placeholders::_2);
	fgp(3,4);
	//不预先指定的参数是按照引用传递,预先指定的参数是按照值传递的
	int m = 5, n = 8;
	auto frh = bind(Du,m,placeholders::_1);
	frh(n);
	cout << "m=" << m << endl;
	cout << "n=" << n << endl;
}

<function>----->头文件: #include<functional>

类模板function是一种函数封装,function的实例可以对任何调用的目标进行存储,复制,调用操作。目标: 函数,lambda表达式等。

void Dun(int x)
{
	cout <<"不预先指定的参数placeholders::_1=" <<x << endl;
}

int main()
{
	//有参数,绑定的函数不预先指定的第一个参数
	bind(Dun, placeholders::_1, 2);
	function<void(int)> func = bind(Dun, placeholders::_1);
	func(1);
}

<**Lambda表达式>

a. Lambda表达式用于定义和创建匿名的函数对象,以简化编程工作。

    Lambda表达式语法: [捕捉列表]  (参数列表)  mutable/ exception   -> 返回值类型 {语句} 

b. Lambda表达式分析:

   (1)捕捉列表: 总是出现在Lambda表达式开始处,实际上[]是Lambda表达式引出符,编译器根据引出符判断接下来的代码是否是Lambda表达式。

       捕捉列表能够捕捉那些定义到Lambda为止时Lambda所在作用范围内可见的变量(包括Lambda所在类的this)。

   (2)参数列表,:与普通的参数列表一样。按照值传递和按照引用传递, 无参数时可以将这部分省略。

   (3)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值