Планы библиотеки на C ++ 0x?
Вопрос
В последнее время я очень рад поддержке лямбд в 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
для сокращения времени компиляции.