82

可能重复:
c++0x 中的递归 lambda 函数

这是一个普通的旧递归函数:

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

我将如何编写这样的递归函数作为 lambda 函数?

[](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

是否有任何表示当前 lambda 的表达式,以便它可以递归地调用自己?

4

1 回答 1

114

是的他们可以。您可以将它存储在一个变量中并引用该变量(尽管您不能将该变量的类型声明为auto,但您必须改用一个std::function对象)。例如:

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

否则,不,您不能this从 lambda 的主体内部引用指针。

于 2013-01-25T23:38:18.797 回答