什么是使用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 真的是正确的解决方案.