C++0x ラムダ式続報

Wikipedia がいつの間にか更新されていました

ラムダ式(N2550)についてけっこう書かれています


Wikipedia - C++0x


【return は省略できる・・・のかな】
return を省略したときの戻り値と戻り値の型について書いてないけど
(見逃してるだけかも)

vector<int> v;
int total = 0;
for_each(v.begin(), v.end(), [&total](int x) { total += x; });


【戻り値の型を省略すると、戻り値を decltype した型が戻り値の型になる】
以下の2つのラムダ式は同じ意味になる

[](int x, int y) { return x + y; }
[](int x, int y) -> decltype(x + y) { return x + y; }


【メンバ関数内でのラムダ式
メンバ関数内でのラムダ式はそのクラスの friend と見なされる
そのため、ラムダ式内ではそのクラスの private メンバにアクセスすることができる

class hoge {
    void private_func() {}
public:
    void foo()
    {
        [](hoge *p) { p->private_func(); };
    }
};


【this キャプチャの例】

class hoge {
    void private_func() {}
public:
    void foo()
    {
        [this]() { this->private_func(); }
    }
};


ラムダ式(N2550)

C++0x言語拡張まとめ