2008-09-25 73 views

回答

17

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

库文件本身给你的是没有什么的先期例如:

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占位符相比看起来更不可思议,并且在代码审阅期间更容易被接受。超越基本boost :: lambda的使用很可能会让你的同事感到悲伤,除非你是在一个流血的C++商店。

尽量不要走极端 - 有时候和地方,一个for -loop 真的是正确的解决方案。

2

取决于。你是否已经很熟悉函数式编程概念?如果不是的话,我建议你从一种专为函数式编程设计的语言开始,而不是一种具有功能特性的过程语言。如果你不习惯以功能性风格进行编码(它不一定必须是10,但它绝对不同),那么你会花更多的时间来对付语法,没有足够的时间学习完成任务。

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

+0

如果您已经熟悉C风格的语法,那么就功能语言而言,我会推荐Erlang--它是一种更为熟悉的语法,其总体结构相似,因此您花费的时间更少,编程时间更多。 – coppro 2008-09-25 17:58:28

1

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