8

最近我对 VC2010 中对 lambdas 的支持感到非常兴奋。我慢慢开始掌握这个特性在将 C++ 转换成更好的东西方面的​​全部潜力。

但后来我意识到,这种潜力在很大程度上取决于在 boost 和 QT 等日常库中对 lambdas 的主流支持。
有谁知道是否有计划使用 C++0x 的新功能扩展这些库?

lambdas 实际上取代了对 boost::lambda 以及 boost 中与之交互的所有内容的需求。QT 可以在其所有容器中添加对 lambda 的支持,甚至可以作为定义SLOTs的替代方式

4

5 回答 5

6

Lambdas 已经非常适合现有的库 - 函数接受模板参数给定类型的函数对象的任何地方。

这是它们的一大优点——它们是语言特性的经典示例,它以漂亮的语法将现有实践编码。

显然 boost lambda 库变得多余了,但这意味着它不需要添加任何新功能。

于 2009-08-03T17:20:38.183 回答
4

我看不到 lambda 的使用如何取决于库的支持。Lambda 消除了创建许多类的需要,只是为了包装不同的小算法并与其他语言/库功能巧妙地结合在一起(std::function想到)。无论您过去在哪里传递函数对象或函数指针,都可以使用 lambda。

因此,他们主要添加了另一种利用现有代码和库的替代方案。我认为库更好地支持 lambda 的唯一方法是使用更多的函数式方法。

于 2009-08-03T17:27:51.510 回答
3

这样的库很有可能会等到相关的 C++0x 特性得到适当的编译器支持,并且在主流编译器支持它之前不会太费心。不要屏住呼吸。

于 2009-08-03T17:09:03.763 回答
1

这不是真的,你不能用 C++0x lambda 替换 boost::lambda。出于某些原因,请参见此处(关于增强绑定,但我认为其中大部分是转移)

此外,@daniel可能会帮助您开始使用 lambda 函数/增强槽绑定。这让我的生活变得异常轻松。

此外,来自我的消息来源的@litb,lambdas 不会改变(啊)

于 2009-08-03T21:28:25.360 回答
0

大多数库使用标准函数指针进行回调。C++0x lambda 可以用作函数指针,因此不需要修改大多数库。其他库使用模板,因此它们可以采用任何可调用对象(例如std::foreach,不需要修改)。

我能想到的库可能更改为的唯一其他 C++0x 功能是使用强类型的enums. 此外,库可能会开始使用extern模板来减少编译时间。

于 2009-08-03T17:30:37.133 回答