そこで、C++0x FAQS ページ ( http://www2.research.att.com/ ) の Bjarne による簡単な例に基づいて、ラムダが使用されているスコープ内のローカル変数にアクセスするラムダをテストしようとしました。 ~bs/C++0xFAQ.html#ラムダ
この簡単なテスト コードを試すと、次のようになります。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//Test std::fill() with C++0x lambda and local var
void f (int v) {
vector<int> indices(v);
int count = 0;
fill(indices.begin(), indices.end(), [&count]() {
return ++count;
});
//output test indices
for (auto x : indices) {
cout << x << endl;
}
}
int main() {
f(50);
}
エラーが発生します:
required from 'void std::fill(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >, _Tp = f(int)::<lambda()>]'
この errmsg は、 std::fill() 署名が新しい値要素の割り当てに使用するために const Type& を必要とすることを示していると思います。
しかし、Bjarne の例で示されているように、この目的で fill() を使用できるようにするには、ラムダ キャプチャ句内で参照 '[&count]' を使用して元の値を再割り当てできるようにする必要があるのではないでしょうか。 'return ++count;' を介してインクリメントするカウント var で要素値をインデックス付けします。ラムダステートメントブロック?
私はまだこれらのラムダについて完全に理解していないことを認めます! :)