我试图理解这些不同绑定方法之间的区别。有类似的问题 boost :: bind和boost :: phoenix :: bind
但是,如果有人能用例子解释这一点,那就太好了。也就是说,boost :: phoenix是boost :: bind,booost :: lambda库的超集吗?
我试图理解这些不同绑定方法之间的区别。有类似的问题 boost :: bind和boost :: phoenix :: bind
但是,如果有人能用例子解释这一点,那就太好了。也就是说,boost :: phoenix是boost :: bind,booost :: lambda库的超集吗?
我认为这个故事是(虽然我还不够讲述整个故事),但首先创建了boost :: bind来替换C ++ 98中难以使用的bind1st / bind2nd,它实现了它的目标,现在是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 lambda表达式是日常工作的选择。它方便,清晰,编译时友好。 Phoenix3是多变的,非常强大,非常酷,具有编译时间长的缺点。
但是,如果有人能用例子解释这一点,那就太好了。
什么例子?它们是同一概念的不同实现。
这是真正重要的:
boost::lambda::bind
随之而来)。boost::bind
将被替换为 boost::phoenix::bind
在将来。它尚未被替换的唯一原因是 boost::bind
支持/有旧的(读取:损坏)编译器的变通方法,例如MSVC6,而Boost.Phoenix严格要求符合C ++ 03的编译器。结合这两个事实,很明显,新代码中唯一真正的候选者是 boost::phoenix::bind
。
也就是说,boost :: phoenix是boost :: bind,booost :: lambda库的超集吗?
是的,这是正确的。