そのため、Xcode 4.4 にアップグレードしたところ、変更ログで次のことに気付きました。
Apple LLVM コンパイラは、ラムダを含む追加の C++11 機能をサポートします
これは素晴らしいです!そこでコーディングに取り掛かり、いくつかのことを発見しました。
ラムダは、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();
どうしてこれなの?上で見たことを考えると、この 2 つは意味的に同等であるべきではないでしょうか?