在 C++ 语言和库的范围内,我建议首先习惯使用 STL 算法函数模板进行编程,因为 boost::lambda 最常见的用途之一是用内联表达式替换函子类。
库文档本身为您提供了一个预先示例,说明它的用途:
for_each(a.begin(), a.end(), std::cout << _1 << ' ');
where 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++ 商店。
尽量不要太过分——那里are的时间和地点for
-loop really是正确的解决方案。