82

重複の可能性:
c++0x の再帰ラムダ関数

これは昔ながらの再帰関数です。

int fak(int n)
{
    return (n <= 1) ? 1 : n * fak(n - 1);
}

このような再帰関数をラムダ関数としてどのように記述すればよいでしょうか?

[](int n) { return (n <= 1) ? 1 : n * operator()(n - 1); }
// error: operator() not defined

[](int n) { return (n <= 1) ? 1 : n * (*this)(n - 1); }
// error: this wasn't captured for this lambda function

再帰的に自分自身を呼び出すことができるように、現在のラムダを示す式はありますか?

4

1 に答える 1

114

はい、できます。それを変数に格納して、その変数を参照できます (その変数の型を として宣言することはできませんが、代わりにオブジェクトautoを使用する必要があります)。std::function例えば:

std::function<int (int)> factorial = [&] (int i) 
{ 
    return (i == 1) ? 1 : i * factorial(i - 1); 
};

thisそうしないと、いいえ、ラムダの本体内からポインターを参照できません。

于 2013-01-25T23:38:18.797 に答える