最近我对VC2010中对lambdas的支持感到非常兴奋。我正在慢慢开始把握这个功能在将C ++转化为更好的东西方面的全部潜力。
但后来我意识到这种潜力很大程度上取决于日常图书馆如增强和QT对lambdas的主流支持。
有没有人知道是否有计划使用C ++ 0x的新功能扩展这些库?
lambdas实际上取代了对boost :: lambda的需求以及与之交互的boost中的所有内容。
QT可以在所有容器中添加对lambda的支持,甚至可以作为定义SLOT
的替代方法
答案 0 :(得分:6)
Lambdas已经非常适合现有的库 - 函数接受模板参数给出的类型的函数对象的任何地方。
这是关于他们的一件好事 - 他们是一个语言特征的典型例子,它以一种漂亮的语法编纂现有的做法。
显然,boost lambda库变得多余,但这意味着它不需要添加任何新功能。
答案 1 :(得分:4)
我没有看到lambda的使用取决于库的支持。 Lambdas消除了创建许多类的需要,只是为了包装不同的小算法,并与其他语言/库特征巧妙地结合在一起(std::function
浮现在脑海中)。无论您以前在哪里传递函数对象或函数指针,都可以使用lambdas。
因此,他们主要为使用现有代码和库添加了另一种选择。我可以看到库以更好地支持lambda的唯一方法是使用更多功能风格的方法。
答案 2 :(得分:3)
有可能这样的库会等到相关C ++ 0x功能的正确编译器支持,并且在主流编译器支持它之前不会费心。不要屏住呼吸。
答案 3 :(得分:1)
这不是真的,你不能用C ++ 0x lambda替换boost :: lambda。由于某些原因,请参阅here(关于boost bind,但我认为其中大部分都会转移)
此外,@ daniel this可能会帮助您开始使用lambda函数/ boost bind作为插槽。它让我的生活变得异常轻松。
另外,@ litb来自我的消息来源,lambdas不会被改变(argh)
答案 4 :(得分:0)
大多数库使用标准函数指针进行回调。 C ++ 0x lambdas可以用作函数指针,因此大多数库都不需要修改。其他库使用模板,因此可以使用任何可调用对象(例如std::foreach
不需要修改)。
我能想到的唯一其他C ++ 0x功能库可能会改为使用强类型enums
。此外,库可能会开始使用extern
模板来减少编译时间。