繁体   English   中英

c ++提升lambda库

[英]c++ boost lambda libraries

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

保留在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 -loop 真的是正确的解决方案。

要看。 您是否已经精通函数式编程概念? 如果没有,我建议你从一种专为函数式编程而不是带有功能特性的过程语言开始。 如果您没有在功能性的风格来编码(这不是一定困难 ,但它绝对是不同的),那么你会花更多的时间战斗的语法,没有足够的时间学习得到的东西完成。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM