boost :: function и boost :: bind - это круто, но что действительно круто в boost :: lambda? - PullRequest
3 голосов
/ 30 января 2010

На странице 175 параграфа В силе C ++ Мейерс может сказать об обобщенных функторах и связывании:

Я нахожу, что tr1::function позволяет вам делать так удивительно, это заставляет меня покалывать все над. Если вы не покалываете, это может потому что ты смотришь на определение ... и интересно, что это происходит с ....

И я согласен с ним в связывании и функционировании. Что касается лямбды, я понимаю, что делает лямбда и как она это делает, но может ли кто-нибудь опубликовать потрясающий фрагмент книги или словесный набросок того, почему лямбда (в терминологии Мейерса) взорвет мои носки? Я спрашиваю, потому что каждая область C ++, где используется синтаксис заполнителя, кажется мне хаком (да, я знаю достаточно о функциональном методе, , поэтому, пожалуйста, без основ ), я согласен с тем, как он используется в связать и MPL; Однако в случае с лямбдой я просто хочу, чтобы она была оправданной, чтобы я мог выбрать погоду и включить ее в свой репертуар.

- редактировать -

В этом ответе SO упоминается о встроенном создании функтора с использованием синтаксиса только заполнителя, он упоминает о расширенном использовании, и это, вероятно, то, что мне нужно ... в расширенном использовании это все еще только встроенное создание функторы?

Ответы [ 2 ]

4 голосов
/ 30 января 2010

Исходя из оставленных выше комментариев и ссылки в вопросе, я принимаю следующий ответ (wiki сообщества):

  1. Boost.Lambda отвечает цели создания встроенного функтора (этот термин мне нравится). Эта функциональность может быть заполнена с помощью Function + Bind, но она более многословна, чем должна быть, и для простых функторов это не нужно - например, сортировка, показанная в комментариях выше.

  2. Очевидно, что между парой Function-Bind и Lambda существует семантическое совпадение - это исторический артефакт, и поскольку у Lambda есть raison d'être , он существует в Boost.

0 голосов
/ 30 января 2010

Что «круто» в этом, так это то, что, как и boost foreach и параметр boost , вводит / расширяет синтаксис в C ++, который отсутствует в языке, то есть он эмулирует анонимный работает напрямую как параметры.

...