lambda のキャプチャで変数を保持

そういえば、こういう事ができるのかーと思いつつ。

[ソース]

#include <functional>
#include <iostream>

std::function<int(int)>
make_sum(){
    int sum = 0;
    return [=](int n) mutable -> int{
        sum += n;
        return sum;
    };
}

int
main(){
    auto sum = make_sum();
    std::cout << sum(1) << std::endl;
    std::cout << sum(2) << std::endl;
    std::cout << sum(3) << std::endl;
    std::cout << sum(4) << std::endl;
    std::cout << sum(5) << std::endl;
    return 0;
}

[出力]

1
3
6
10
15


何か面白いことに使えないかな。