Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::function和boost::bind很酷,但是boost::lambda真正酷的是什么?_C++_Boost_Functional Programming_Boost Lambda - Fatal编程技术网

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

C++ boost::function和boost::bind很酷,但是boost::lambda真正酷的是什么?,c++,boost,functional-programming,boost-lambda,C++,Boost,Functional Programming,Boost Lambda,Meyers第175页第1段提到了广义函子和绑定: 我发现tr1::function可以让你做什么 太神奇了,它让我浑身发麻 结束如果你不感到刺痛,可能会 可能是因为你正盯着 定义。。。想知道是什么 继续 我同意他关于约束和功能的观点。关于lambda,我知道lambda是做什么的,它是如何做到的,但是有没有人能发表一篇书式的令人兴奋的片段,或者一篇关于lambda为什么要(用Meyers的术语)让我大吃一惊的口头提纲?我问,因为使用C++中每个占位符语法的区域对我来说似乎是一个黑客(是的,我对

Meyers第175页第1段提到了广义函子和绑定:

我发现
tr1::function
可以让你做什么 太神奇了,它让我浑身发麻 结束如果你不感到刺痛,可能会 可能是因为你正盯着 定义。。。想知道是什么 继续

我同意他关于约束和功能的观点。关于lambda,我知道lambda是做什么的,它是如何做到的,但是有没有人能发表一篇书式的令人兴奋的片段,或者一篇关于lambda为什么要(用Meyers的术语)让我大吃一惊的口头提纲?我问,因为使用C++中每个占位符语法的区域对我来说似乎是一个黑客(是的,我对函数方法了解得够多了,<强>所以请不要基础> <强> >,我同意它在Band和MPL中使用的方式;然而,在兰姆达的情况下,我只想证明它是正确的,这样我就可以决定我是否应该把它加入我的曲目

--编辑--


提到使用placedholder语法内联创建函子,他提到高级用法,这可能就是我想要的。。。在高级用法中,它仍然只是函子的内联创建吗

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

  • Lambda满足了内联函子创建的目的(这是我喜欢的术语)。此功能可以由Function+Bind填充,但它比需要的更详细,对于简单的functor,这是不必要的-例如,上面注释中显示的排序

  • 函数绑定对和Lambda之间显然存在语义重叠-这是一个历史产物,因为Lambda有其存在的理由,所以它存在于Boost中


  • 什么是“酷”,就像Boost FooCH和Boost参数一样,将语法注入到C++中,而不是在语言中,即它直接模拟匿名函数作为参数。在我第一次读它的时候,有很多例子让我大吃一惊。例如:

    排序(a、b、1<\u 2)。然后这样搜索。(+1)是的,我做了(至少前10页)——我理解这种用法。是这样吗?Lambda都是关于匿名函数和Boost的内联创建的。Lambda在讨论C++0x Lambdas包含之前就给了您这样做的工具,所以我不会说“就这些了”。(嘿,不要声称我的+1;)BB和BLL是分开进化的,因此重叠。看,这应该可以消除任何困惑。谢谢大家:虽然你们应该回答=D,但这三个答案中的任何一个都很难接受。我想我会使用lambda来做一些简单的事情——我只是在阅读文档,因为我遵循了spirit的参考。我希望他们能把函数编程硬地引入语言中——包括精神把我的编译器带给它的膝盖。好的,另一种选择是用自己的发明语言编写自己的编译器。你看这个方法是错误的,II非,为什么不使用C++,这就是为什么C++语法的这部分还没有。C++0x lambda表达式真的很酷,但它们只是编译器支持的迭代器和对其进行迭代的一小步。