可能性のある複製:
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
現在のラムダを表す式があり、それ自体を再帰的に呼び出すことができますか?
はい、できます。変数に保存して、その変数を参照できます(その変数の型をauto
として宣言することはできませんが、代わりにstd::function
オブジェクトを使用する必要があります)。例えば:
std::function<int (int)> factorial = [&] (int i)
{
return (i == 1) ? 1 : i * factorial(i - 1);
};
それ以外の場合、いいえ、ラムダの本体内からthis
ポインターを参照できません。