我正在尝试理解不同的绑定方法之间的区别。这里有一个类似的问题,可以查看boost::bind和boost::phoenix::bind的区别。
但是,如果有人能用示例来解释这个问题,那就太好了。另外,boost::phoenix是否是boost::bind、boost::lambda库的超集?
但是,如果有人能用示例来解释这个问题,那就太好了。另外,boost::phoenix是否是boost::bind、boost::lambda库的超集?
我认为这个故事是(虽然我还不够老,无法讲述整个故事),boost::bind最初是为了替换C++98中难以使用的bind1st/bind2nd而创建的,并且它达到了其目标,现在成为C++11的一部分。但是过去10年中,随着函数式编程风格在C++中的兴起,boost::lambda将其推向了极致(当它被创建时),用纯库方法支持了一个相当广泛的函数构造集合。
从新闻组中我知道作者尝试将boost::lambda和boost::phoenix两个库结合起来,因为它们处理几乎相同的问题。我猜那就是精心设计的boost::phoenix2。
然后出现了boost::proto,它是一个编写表达式模板的库,或者我会说它是一个元库。所以phoenix又再次实现在boost::proto上,然后我们看到了phoenix3。我认为phoenix3在所有上述库中最强大。
另一方面,C++11添加了对lambda表达式的语言支持,我个人认为非常有用和方便。唯一的缺点是它不是多态的(而phoenix3允许创建多态函数对象)。
通过个人经验得出的结论是,如果可用,C++11 lambda表达式是日常工作的选择。它方便、清晰且编译时友好。Phoenix3具有多态性,非常强大、很酷,但缺点是编译时间长。