2010-01-30 3 views
3

На странице 175 абзац 1 Effective C++ Meyers это сказать об обобщенных функторах и переплетеboost :: function and boost :: bind - это круто, но что действительно круто о boost :: lambda?

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

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

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

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

+3

Вы прочитали документацию BLL? Есть много примеров, которые сдули мой мозг с первого раза, когда я его прочитал. Например: 'sort (a, b, _1 <_2);'. И затем ищите SO. – dirkgently

+0

(+1) Да, я сделал (по крайней мере первые 10 страниц) - и я понимаю эту форму использования. Это правда? –

+3

Lambdas все о встроенном создании анонимных функций и Boost.Lambda дал вам инструменты, чтобы сделать это до того, как C++ 0x включение lambdas даже обсуждалось - так что я бы не сказал * «thats it?» *. * (эй, не претендуйте на мой +1;) * –

ответ

4

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

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

  2. Существует, очевидно, семантическое перекрытие между Функционально-Bind парой и Lambda - это исторический артефакт, а потому Lambda имеет смысл существование, она существует в Boost.

0

Что такое «круто» о нем, что, как и с повышения Еогеасп и параметра повышающего, впрыскивает/расширяет синтаксис в C++, который не является языком, т.е. эмулирует анонимные функции непосредственно в качестве параметров ,

+1

Что должно задуматься, зачем использовать C++ в этом случае вообще ... – ima

+1

Ну, альтернативой было бы написать собственный компилятор с вашим собственным придуманным языком. –

+0

Вы смотрите на неправильный путь ima, это не зачем использовать C++ вообще, поэтому это еще не синтаксис C++. Лямбда-выражения C++ 0x действительно классные, но они всего лишь небольшой шаг к итераторам, поддерживающим компилятор, и итерации по ним. – Blindy

Смежные вопросы