Вопрос

В последнее время я очень рад поддержке лямбд в VC2010. Я постепенно начинаю осознавать весь потенциал этой функции в превращении C ++ во что-то намного лучше.

Но потом я понял, что этот потенциал в значительной степени зависит от поддержки лямбда-потоков в основных библиотеках, таких как boost и QT.
Кто-нибудь знает, есть ли планы расширить эти библиотеки новыми функциями C ++ 0x?

лямбды практически заменяют необходимость в boost :: lambda и во всем, что с ним связано, в boost. QT может добавить поддержку лямбд во всех их контейнерах и, возможно, даже как альтернативный способ определения SLOT s

Это было полезно?

Решение

Лямбды уже очень хорошо вписываются в существующие библиотеки - везде, где функция принимает функциональный объект типа, заданного параметром шаблона.

Это одна из их замечательных особенностей - это классический пример языковой функции, которая кодифицирует существующую практику в изящном синтаксисе.

Очевидно, что лямбда-библиотека boost становится избыточной, но это означает, что для нее не требуется добавлять какие-либо новые функции.

Другие советы

Я не понимаю, как использование лямбды зависит от поддержки библиотек. Лямбды избавляют от необходимости создавать множество классов просто для того, чтобы оборачивать разные небольшие алгоритмы и аккуратно совмещать их с другими функциями языка / библиотеки (на ум приходит std :: function ). Где бы вы ни передавали объект функции или указатель на функцию, также можно использовать лямбды.

Таким образом, они в основном добавляют другую альтернативу для использования существующего кода и библиотек. Единственный способ улучшить поддержку лямбды для библиотек - использовать более функциональные подходы.

Скорее всего, такие библиотеки будут ждать, пока не будет надлежащей поддержки компилятора для соответствующих функций C ++ 0x, и не будут сильно беспокоиться об этом, пока основные компиляторы не поддержат ее. Не задерживай дыхание.

Это НЕ верно, вы не можете заменить boost :: lambda на C ++ 0x lambda. См. здесь , чтобы узнать о некоторых причины (о повышении привязки, но я думаю, что большинство из них переносит)

Кроме того, @daniel это может помочь вам начать использовать лямбда-функции / boost bind для слотов. Это делает мою жизнь невероятно легкой.

Кроме того, @litb из моих источников, лямбды не будут изменены (argh)

Большинство библиотек используют стандартные указатели функций для обратных вызовов. В качестве указателей на функции можно использовать лямбды C ++ 0x, поэтому большинство библиотек не нужно изменять. Другие библиотеки используют шаблоны, чтобы они могли принимать любой вызываемый объект (например, std :: foreach не нужно было бы изменять).

Единственная другая особенность C ++ 0x, о которой я могу подумать, что библиотеки могут измениться, это использование строго типизированных enums . Кроме того, библиотеки могут начать использовать шаблоны extern для сокращения времени компиляции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top