Я думаю, что история (хотя я и не достаточно стара, чтобы рассказать всю историю), boost :: bind была впервые создана для замены сложного в использовании bind1st / bind2nd в C ++ 98, и она достигает его цель и теперь часть C ++ 11.
Но также как и в последние 10 лет, когда появился стиль функционального программирования в C ++, boost :: lambda продвигает его настолько далеко (во время его создания), что поддерживает достаточно широкий набор функциональных конструкций с чисто библиотечным подходом в C ++. 1001 *
И затем, как я знаю из группы новостей, автор boost :: lambda и boost :: phoenix пытаются объединить две библиотеки, поскольку они решают практически одну и ту же проблему. Я думаю, это был великолепно разработанный буст :: phoenix2
И затем идет boost :: proto, который является библиотекой для написания шаблонов выражений, или я бы сказал, что это метабиблиотека. Таким образом, нирвана феникса снова, возрождается на boost :: proto, тогда мы видим phoenix3. Я думаю, что Phoenix3 является самым мощным среди всех выше.
С другой стороны, в C ++ 11 добавлена языковая поддержка лямбда-выражений, что лично мне кажется очень полезным и удобным. Единственный недостаток - он не полиморфен (в то время как phoenix3 позволяет создавать объекты полиморфных функций).
В заключение, я пришел с личным опытом, лямбда-выражение C ++ 11 - это выбор для повседневной работы, если таковой имеется. Это удобно, понятно и удобно во время компиляции. Phoenix3 - полимофический, очень мощный, очень крутой, с недостатком долгого времени компиляции.