c++ - boost::function 和 boost::bind 很酷,但是 boost::lambda 真正酷的是什么?

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

Effective C++ 的第 175 页第 1 段Meyers 对广义仿函数和绑定(bind)有这样的说法:

I find what tr1::function lets you do so amazing, it makes me tingle all over. If you're not tingling , it may be because you're staring at the definition of ... and wondering what's going on with the ....

我同意他关于绑定(bind)和功能的观点。关于 lambda,嗯,我了解 lambda 的作用以及它是如何做到的,但是有人可以发布一本书式的令人兴奋的片段或口头概述为什么 lambda 应该(用迈耶斯的术语)让我大吃一惊吗?我问是因为 C++ 的每个使用占位符语法的领域对我来说都像是一个黑客(是的,我对功能方法了解足够多,所以请不要基础),我同意它的使用方式在绑定(bind)和 MPL 中;但是,在 lambda 的情况下,我只想证明它是合理的,这样我就可以决定天气我应该把它输入我的轨道。

-- 编辑--

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

最佳答案

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

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

  2. 在 Function-Bind 对和 Lambda 之间显然存在语义重叠 — 这是一个历史产物,并且因为 Lambda 有它的存在理由,所以它存在于 Boost 中。

关于c++ - boost::function 和 boost::bind 很酷,但是 boost::lambda 真正酷的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2167588/

相关文章:

c++ - labeled_graph 中的权重

Haskell 函数应用和柯里化(Currying)

scala - 如何按未知数量的项目对 Scala 中的列表进行排序?

haskell - 如何确定 Haskell 函数的类型?

c++ - 如何在线程完成时使用 boost::thread::at_thread_exit 或调用函数

c++ - 为什么 C++ 中指向方法取消引用运算符的指针具有如此低的优先级?

c++ - enable_if 类型的大小未知

C++ 如何为初始化为 vector 的类创建 move 语义

c++ - 共享内存大小计算c++

一个项目中的 C++14 和 C++17