Здравствуйте, kaa.python, Вы писали:
KP>KP>blockReturningIntTakingChar = ^int (char arg) { return arg*10; };
KP>int n = blockReturningIntTakingChar(‘a’);
KP>
Поубивал бы за то, что они сделали своё расширение для лямбд, когда комитет С++ уже практически стандартизовал лямбды в языке и основные поставщики уже поддержали их
Молодцы — одно слово
От того, что у них единый синтаксис для С, С++ и Objective-C мало кому тепло; а вот от того, что разный синтаксис у разных компиляторов С++ ничего кроме проблем.
Они реализовали
__block переменные*, которых нет в С++0х; но я уверен они могли бы это сделать как расширение для С++0х лямбд, тогда по-крайней мере __block переменные можно было бы просто не использовать, если нужна портируемость.
* __block переменные предоставляют настоящие замыкания. Т.е. если в С++0х передал переменную как [&], но её время жизни не согласовано со временем жизни лямды — сам себе злобный буратино. __block переменные же автоматически будут жить пока живёт лямбда. Т.к. сборки мусора нет, то __block переменная, естественно, просто копируется со стека в динамическую память (насколько я понял, лениво, т.е. только при необходимости).