x回调函数 Lambda表达式

参考

https://msdn.microsoft.com/zh-cn/magazine/cc163362.aspx

Cocos2d-x的源码里有很多

auto item2 = MenuItemFont::create("— Go Back —", [&](Ref *sender) { static_cast<LayerMultiplex*>(_parent)->switchTo(0);});

auto item3 = MenuItemSprite::create(spriteNormal, spriteSelected, spriteDisabled, [](Ref *sender) {log("sprite clicked!");});

这种类型的代码。

从create函数的函数声明里,我们可以看到【】和【&】这些代码所在的地方是回调函数所在的地方。

其实这是C++11新引入的一种语法,叫做Lambda表达式。

而在C++98中,我们的回调函数是要这么设置的,

boolcompare(int&a,int&b)//先定义比较函数

{

returna>b;//降序排序

}

sort(a,a+n,compare);//再调用

现在又了新增的Lambda语法标准:

我们可以

sort(a, a+n, [](int a, int b){return a > b;});

是不是简洁很多,看了Lambda的好处。下面详细了解下Lambda

C++中,一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。它与普通函数不同的是,lambda必须使用尾置返回来指定返回类型。

由于Lambda的类型是唯一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导:

auto f=[](inta,intb){returna>b;});

我们注意到 Lambda表达式的前面有个[]里面有时有&有时没有,是怎么回事?

[x,// x以傳值方式傳入(預設),y以傳參考方式傳入。

, x, &z] // z顯示地以參考方式加以引用。其餘變數以傳值方式加以引用。我们注意到 有&的表达式里都引用了外部变量,相反没有引用外部变量的就没有&。

在新的C++14标准中,还支持基于类型推断的泛型表达式.

sort(a,a+n,[](const auto&a,const auto&b){return a>b;});//降序排序:不依赖a和b的具体类型

好处是:

,使用双手的是劳工,使用双手和头脑的舵手,

x回调函数 Lambda表达式

相关文章:

你感兴趣的文章:

标签云: