set
используется для присвоения ссылки на объект. Эквивалент C был бы
int i;
int* ref_i;
i = 4; // Assigning a value (in VBA: i = 4)
ref_i = &i; //assigning a reference (in VBA: set ref_i = i)
Лямбды уже очень хорошо вписываются в существующие библиотеки - везде, где функция принимает объект функции типа, заданного параметром шаблона.
Это одна из замечательных особенностей них - они это классический пример языковой функции, которая систематизирует существующую практику в изящном синтаксисе.
Очевидно, что библиотека лямбда-выражения boost становится избыточной, но это означает, что она не требует добавления каких-либо новых функций.
Большинство библиотек используют стандартные указатели на функции для обратных вызовов. Лямбда-выражения C ++ 0x можно использовать в качестве указателей на функции, поэтому большинство библиотек не нужно изменять. Другие библиотеки используют шаблоны, поэтому они могут принимать любой вызываемый объект (например, std :: foreach
не нужно изменять).
Единственная другая функция C ++ 0x, которую я могу придумать для этих библиотек может измениться на использование строго типизированных перечислений
. Кроме того, библиотеки могут начать использовать шаблоны extern
, чтобы сократить время компиляции.
Я не понимаю, как использование лямбда зависит от поддержки библиотеками. Лямбда-выражения избавляют от необходимости создавать множество классов только для того, чтобы обернуть различные небольшие алгоритмы и аккуратно согласовать их с другими функциями языка / библиотеки (на ум приходит std :: function
). Где бы вы ни передавали либо объект функции, либо указатель на функцию, также можно использовать лямбды.
Таким образом, они в основном добавляют еще одну альтернативу для использования существующего кода и библиотек. Единственный способ, с помощью которого библиотеки лучше поддерживают лямбда, - это использовать более функциональные подходы.
Скорее всего, такие библиотеки будут ждать, пока компилятор не получит надлежащую поддержку соответствующих функций C ++ 0x, и не будут сильно беспокоиться об этом, пока основные компиляторы не будут поддерживать их. Не задерживайте дыхание.
Это НЕ верно, вы не можете заменить boost :: lambda на C ++ 0x lambda. См. здесь по некоторым причинам (о привязке ускорения, но я думаю, что большая часть из них передается)
Кроме того, @daniel этот может помочь вам начать использовать лямбда-функции / привязку ускорения для слоты. Это делает мою жизнь невероятно легкой.
Кроме того, @litb из моих источников, лямбды не будут изменены (argh)