boost :: function和boost :: bind很酷,但是对于boost :: lambda真的很酷吗?

时间:2010-01-30 10:45:35

标签: c++ boost functional-programming boost-lambda

On Page 175 Effective C++ Meyers的第1段有关广义仿函数和约束的说法:

  

我找到了tr1::function让你做的事情   太棒了,它让我感到兴奋   过度。如果你没有刺痛,它可能会   因为你正盯着那个   ...的定义,并想知道是什么   继续......

我同意他对绑定和功能的看法。关于lambda,我理解lambda的作用以及它是如何做到的,但是有人会发布一本书风格的令人兴奋的片段或者为什么lambda应该(用迈耶斯的术语)吹掉我的袜子的口头大纲?我问,因为使用占位符语法的C ++的每个区域对我来说都是一个黑客(是的,我对功能方法有足够的了解,所以请不要基础),我同意它的使用方式在绑定和MPL;然而,在lambda的情况下我只是想要它是合理的,所以我可以决定天气我应该把它输入我的曲目。

- 编辑 -

This SO answer提到使用putholder语法内联创建一个仿函数,他提到了高级用法,这可能就是我所追求的......在高级用法中它仍然只是内联创建了仿函数?

2 个答案:

答案 0 :(得分:4)

根据上面留下的评论以及问题中的链接,以下是我接受的答案(社区维基):

  1. Boost.Lambda填补了内联函子创建的目的(这就是我喜欢的术语)。这个功能可以通过Function + Bind填充,但它比它需要的更冗长,对于简单的仿函数,这是不必要的 - 例如,上面评论中显示的排序。

  2. 在Function-Bind对和Lambda之间存在明显的语义重叠 - 这是一个历史工件,并且由于Lambda具有 raison d'être,它存在于Boost中。

答案 1 :(得分:0)

关于它的“酷”是什么,就像 boost foreach boost参数一样,将语法注入/扩展到不在语言中的C ++,即它直接模拟匿名函数作为参数。