C ++ Boost Lambda库
使用boost lambda库开始编程的最佳方法是什么。
解决方案
要看。我们已经精通函数式编程概念吗?如果不是这样,我建议我们从针对功能编程设计的语言开始,而不要使用添加了功能特性的过程语言。如果我们不习惯以功能风格进行编码(虽然不一定难,但肯定有所不同),那么我们将花费更多的时间在语法上,而没有足够的时间学习如何完成工作。
至于从哪里开始,我在Scheme上做了很多工作,但是有很多不错的选择。
如果我们使用的是较新的编译器,则可以使用boost。如果尚未安装在计算机上,请安装它(在Windows上,在unbuntu上安装sudo apt-get install libboost-dev,从boost.org获取二进制文件)。阅读文档,然后查看我们现有的代码以了解可能使用它们的情况。例如,如果使用一小段代码对一个函数进行参数化设置,我们是否有很多代码重复项可以消除?
保留在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"循环确实是正确的解决方案,请尽量不要过分。