c ++提升lambda库

时间:2008-09-25 15:00:10

标签: c++ functional-programming boost-lambda

使用boost lambda库开始编程的最佳方法可能是什么。

3 个答案:

答案 0 :(得分:17)

保留在C ++语言和库的边界内,我建议首先习惯使用STL算法函数模板进行编程,因为boost :: lambda最常见的用途是用内联表达式替换functor类内联。

图书馆文档本身为您提供了一个前瞻性的例子:

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

其中std::cout << _1 << ' '生成一个函数对象,在调用时,将其第一个参数写入cout流。这是你可以用自定义函子类std::ostream_iterator或显式循环来做的事情,但是boost :: lambda简洁而且可能很清晰 - 至少如果你习惯了函数式编程概念。

当你(过度)使用STL时,你会发现自己倾向于使用boost :: bind和boost :: lambda。它非常方便,例如:

std::sort( c.begin(), c.end(), bind(&Foo::x, _1) < bind(&Foo::x, _2) );

在你达到这一点之前,不是那么多。因此,使用STL算法,编写自己的仿函数,然后使用boost :: lambda将它们转换为内联表达式。

从专业的角度来看,我认为开始使用boost :: lambda的最佳方法是使用boost :: bind来理解和接受。在boost :: bind表达式中使用占位符看起来不如“裸”boost :: lambda占位符那么神奇,并且在代码审查期间更容易接受。超越基本的提升:: lambda使用很可能让你的同事感到悲伤,除非你在一个前沿的C ++商店。

尽量不要过分 - 次,for - 循环真正的时间和地点是正确的解决方案。

答案 1 :(得分:2)

取决于。您是否已经精通函数式编程概念?如果没有,我建议你从一种专为函数式编程而不是带有功能特性的过程语言开始。如果你不习惯以函数式编码(它不是更难,但它肯定是不同的),那么你将花费更多的时间来对抗语法,而没有足够的时间来学习完成任务。

至于从哪里开始,我在Scheme上削减了功能,但有很多不错的选择。

答案 2 :(得分:1)

如果您正在使用合理的最新编译器,则可以使用boost。如果它已经不在您的机器上,请安装它(sudo apt-get install libboost-dev on unbuntu,如果你在windows上,请从boost.org获取二进制文件)。阅读doc,然后查看现有代码,了解可能使用它们的情况。例如,如果使用一小段代码对函数进行参数化,是否有很多代码重复可以消除?