最近我已经得到关于在VC2010 lambda表达式支持非常兴奋。我慢慢开始掌握全部潜能这一功能在转换C ++到的东西好多了。

但后来我意识到这种潜力在很大程度上取决于主流支持日常的库,例如升压和QT的lambda表达式。结果 有谁知道,如果有计划地用的C ++ 0x?

新功能扩展了这些库

实际lambda表达式替换为的boost ::拉姆达和升压与其交互的一切需要。 QT可以在其所有容器的添加对lambda表达式支持,甚至作为定义的替代方式SLOT小号

有帮助吗?

解决方案

lambda表达式已经适应非常好到现有的库 - 任何地方,一个函数接受由模板参数给定的类型的功能对象

这是关于他们的伟大的事情之一 - 他们是一个语言功能,编纂在一个漂亮的语法现行做法的典型例子

显然,升压λ文库变得多余的,但这意味着它不需要任何新特征被添加到它。

其他提示

我不明白如何拉姆达的使用图书馆取决于支持。 Lambda表达式消除需要创建很多类来包装不同的小的算法,并整齐地与其它语言/库功能配合在一起(std::function想到)。无论你用来传递任一个功能对象或函数指针,lambda表达式可以使用了。

因此,他们主要添加另一替代为利用现有的代码和库。我可以看到库,以更好地支持拉姆达的唯一方法就是使用更多的函数式的方法。

机会是这样的图书馆要等到有对有关C ++ 0x特性的正确的编译器的支持,而不用费心多用它,直到主流编译器都支持它。不要屏住呼吸。

这是不正确的,你不能代替的boost ::拉姆达用的C ++ 0x的λ。请参见这里一些原因(约升压绑定,但我认为大部分转移)

此外,@daniel 可能会帮助您使用lambda函数/升压绑定的插槽上手。它让我的生活非常容易。

此外,从我的来源@litb,lambda表达式都不会被改变(哎呀)

大多数库使用回调标准函数指针。的C ++ 0x lambda表达式可以用作函数指针,所以大多数库将不需要被修改。其他库使用模板,这样他们可以采取任何可调用对象(例如std::foreach将不需要被修改)。

另外唯一的C ++ 0x的功能,我能想到的库可能更改为使用强类型enums。此外,图书馆可能会开始使用extern模板,以减少编译时间。

scroll top