Планы библиотеки на C ++ 0x? - PullRequest
       11

Планы библиотеки на C ++ 0x?

8 голосов
/ 03 августа 2009

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

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

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

Ответы [ 5 ]

6 голосов
/ 03 августа 2009

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

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

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

4 голосов
/ 03 августа 2009

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

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

3 голосов
/ 03 августа 2009

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

1 голос
/ 04 августа 2009

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

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

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

0 голосов
/ 03 августа 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...