首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::bind、boost::lambda::bind和boost::phoenix::bind之间的区别

boost::bind、boost::lambda::bind和boost::phoenix::bind之间的区别
EN

Stack Overflow用户
提问于 2011-11-07 19:27:29
回答 2查看 1.8K关注 0票数 11

我正在尝试理解这些不同的绑定方法之间的区别。在boost::bind and boost::phoenix::bind上也有类似的问题

但是,如果有人能用例子来解释这一点,那就太好了。还有,boost::phoenix是boost::bind,boost::lambda库的超集吗?

EN

回答 2

Stack Overflow用户

发布于 2011-11-09 09:29:57

我认为,boost::bind最初是为了取代C++98中难以使用的Bind1/Bind2而创建的(尽管我还不够大,不能讲完整的故事),它实现了它的目标,现在是C++11的一部分。但是,随着过去10年C++中函数式编程风格的兴起,boost::lambda (在它创建时)推动了它(在创建时),它支持C++中相当广泛的函数构造和纯库方法。

然后,正如我从新闻组了解到的,boost::lambda和boost::phoenix的作者试图将这两个库结合起来,因为它们实际上解决了相同的问题。我猜这就是设计精美的boost::phoenix2

然后是boost::proto,它是一个用于编写表达式模板的库,或者我会说它是一个元库。因此凤凰涅盘再次在boost::proto上重生,然后我们看到了phoenix3。我认为phoenix3是最强大的。

另一方面,C++11增加了对lambda表达式的语言支持,我个人认为这非常有用和方便。唯一的缺点是它不是多态的(虽然phoenix3允许创建多态函数对象)。

作为我个人经验的结论,如果可以的话,C++11λ表达式是日常工作的选择。它方便、清晰、编译时友好。Phoenix3是多态的,非常强大,非常酷,但缺点是编译时间很长。

票数 10
EN

Stack Overflow用户

发布于 2011-11-09 09:43:50

但是,如果有人能用例子来解释这一点,那就太好了。

什么的例子?它们是同一概念的不同实现。

这才是真正重要的:

自从Boost.Phoenix作为一个独立的库(当然还有boost::lambda::bind )发布以来,Boost.Phoenix

  • Boost.Lambda已经被正式弃用。

  • boost::bind的实现将在未来被boost::phoenix::bind的实现所取代。它还没有被替换的唯一原因是,boost::bind支持/有针对旧(读:坏)编译器的解决方案,例如MSVC6,而Boost.Phoenix严格要求C++03兼容的编译器。

将这两个事实结合起来,很明显,在新代码中使用的唯一真正候选者是boost::phoenix::bind

boost::phoenix是boost::bind,boost::lambda库的超集吗?

是的,这是正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8035835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档