cocos2dx | 关于Lambda表达式的个人理解。

 

我理解的lambda表达式(匿名闭包函数)
[] 第一个方括号是捕获列表,可以捕获外部变量的值或者地址,如果想要利用闭包函数修改外部变量的值,则需要传入该值的地址,可以使用指针或者引用符& 。
() 弧括号是函数的形参列表。
{} 大括号是函数体,可以对捕获到的值进行修改,返回值由编译器自动推断,如果需要定义返回值的话,要在大括号前面指明返回值类型,如 []() ->bool {return true}; 。

而cocos2d::addClickListener()的形参为下面这个函数的地址:
c++模板函数std::function<void(cocos2d::Ref*)> &callback
即,命名一个callback函数,并取其地址。该callback函数的实参必须是cocos2d::Ref*类型,返回值必须是void。

那么我们想要添加点击按钮触发的事件,
则必须自己在类里面声明一个callback回调函数来调用,然后把相关的事件定义到callback函数体里。

这样太麻烦了。c++11开始引入了lambda表达式,可以在调用处按照callback函数的格式直接定义一个匿名函数,即没有函数名,所以省去了繁琐的声明定义然后再调用的过程。

lambda表达式还有一个好处就是,她可以通过捕获列表引用外部类作用域成员的值,如果被std::function模版化命名后,新的命名函数也依然可以引用该值和修改该值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值