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

C++ boost::bind、boost::lambda::bind和boost::phoenix::bind之间的区别,c++,boost,boost-bind,boost-lambda,boost-phoenix,C++,Boost,Boost Bind,Boost Lambda,Boost Phoenix,我试图理解这些不同绑定方法之间的区别。目前还有一个类似的问题 但是,如果有人能举例说明这一点,那就太好了。另外,boost::phoenix是boost::bind、booost::lambda库的超集,这是真的吗?我认为故事是这样的(虽然我还没有足够大的年龄来讲述整个故事),boost::bind最初是为了取代C++98中难以使用的bind1st/bind2nd而创建的,它实现了它的目标,现在是C++11的一部分。 但是,正如过去10年中,C++中的函数式编程风格的兴起,Boo::LAMBDA

我试图理解这些不同绑定方法之间的区别。目前还有一个类似的问题

但是,如果有人能举例说明这一点,那就太好了。另外,boost::phoenix是boost::bind、booost::lambda库的超集,这是真的吗?

我认为故事是这样的(虽然我还没有足够大的年龄来讲述整个故事),boost::bind最初是为了取代C++98中难以使用的bind1st/bind2nd而创建的,它实现了它的目标,现在是C++11的一部分。 但是,正如过去10年中,C++中的函数式编程风格的兴起,Boo::LAMBDA(到目前为止)在它的支持下,它支持C++中的纯库方法的一组合理的功能结构。 然后,正如我从新闻组了解到的,《boost::lambda》和《boost::phoenix》的作者试图将这两个库结合起来,因为它们处理的几乎是同一个问题。我猜这就是设计精美的boost::phoenix2

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

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

作为我个人经验得出的结论,C++11 lambda表达式是日常工作的选择(如果可用)。它方便、清晰、编译时友好。Phoenix3是一款多功能的、非常强大、非常酷的产品,其缺点是编译时间长

但是,如果有人能举例说明这一点,那就太好了

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

以下是真正重要的:

  • 自从Boost.Phoenix作为一个独立库发布以来(当然还有
    Boost::Lambda::bind
    ),Boost.Lambda就被正式弃用了
  • 未来,
    boost::bind
    的实现将被
    boost::phoenix::bind
    的实现所取代。它还没有被替换的唯一原因是,
    boost::bind
    支持/解决了旧(读:坏)编译器的问题,例如MSVC6,而boost.Phoenix严格要求兼容C++03的编译器
  • 将这两个事实结合起来,就可以清楚地看出,在新代码中使用的唯一真正候选对象是
    boost::phoenix::bind

    另外,boost::phoenix确实是boost::bind、booost::lambda库的超集吗


    是的,这是正确的。

    C++11在语言中还内置了lamba。最新的VisualStudio和g++支持它。你应该把它添加到混合中!!!我认为这里的重点是区分boost为绑定提供的各种方法,而不是列出所有可用的lambda。您链接到的副本的答案也完美地回答了这个问题。答案很好,但有两个小错误。:-]1) 《Boost.Lambda》一书的作者对任何版本的《凤凰》都没有直接贡献,只有影响力。2) Phoenix v3的编译时间实际上比Boost快。Lambda的编译时间,如果只包含所需的最小标头。@RalphZhang,C++14现在有多态lambdasYou说,“Boost::bind的实现将在将来被Boost::Phoenix::bind的实现所取代。”这实际上还远远不能确定。Boost::bind在设计上功能非常有限。首先需要进行重要的思考和讨论,然后才能将其替换为范围更大的产品,如Phoenix。@Eric:该声明基于Boost dev ML上的对话;我手头没有链接,但我记得Beman和Thomas支持替换(这是在Phx v3开发期间,确切的主题是Boost wide placeholder unification),Peter没有反对意见。不过,尽管Phx v3已经推出一段时间,但它确实没有朝这个方向移动-[Boost wide placeholder unification是我一直想解决的问题。也许我可以在BoostCon之后关注一下这个问题。