Итак, я просто обновился до Xcode 4.4, и я заметил в сводке изменений:
Компилятор Apple LLVM поддерживает дополнительные возможности С++ 11, включая lambdas
Это потрясающе! Поэтому я перешел к кодированию, и я нашел несколько вещей:
-
Lambdas можно назначить блокам Objective-C:
void (^block)() = []() -> void { NSLog(@"Inside Lambda called as block!"); }; block();
-
std::function
может содержать блок Objective-C:std::function<void(void)> func = ^{ NSLog(@"Block inside std::function"); }; func();
-
Мы не можем назначить блок Objective-C для лямбда:
auto lambda = []() -> { NSLog(@"Lambda!"); }; lambda = ^{ // error! NSLog(@"Block!"); }; lambda();
Почему это? Разве два семантически не эквивалентны, учитывая то, что мы видели выше?