closure - kzono/Cxx_1x GitHub Wiki
C++のラムダ関数は、ラムダ関数を呼び出した関数のローカル変数をキャプチャできる。
しかし、ラムダ関数内で値を利用したいだけならば、ラムダ関数の引数として渡せばよい。キャプチャする変数(自由変数と呼ぶらしい)と引数と使い分ける基準は何か?
ラムダ関数は、別の関数への引数として渡されることがよくある。この場合、キャプチャ変数としてどんなものを渡すべきなのか?
#include <iostream>
int main(){
int count = 0;
auto countUp = [&](){
count++;
std::cout << count << std::endl;
};
countUp(); // 1
countUp(); // 2
countUp(); // 3
}
Wikipedia によれば
- グローバル変数の削減
- コールバック関数記述の簡素化
となっている。また、関数型言語では
- 遅延評価
- カプセル化
のために使われる、と記述されている。引数では実現できず、呼び出し側関数のローカル変数をキャプチャすることで実現できる、とは具体的にどんな場合なのか?