可能重复:
Recursive lambda functions in c++0x
下面是一个普通的老式递归函数:
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,这样它就可以递归地调用自己?
发布于 2013-01-26 07:38:19
是的,他们可以。您可以将其存储在一个变量中并引用该变量(尽管不能将该变量的类型声明为auto
,但必须使用std::function
对象)。例如:
std::function<int (int)> factorial = [&] (int i)
{
return (i == 1) ? 1 : i * factorial(i - 1);
};
否则,您不能从lambda的主体内部引用this
指针。
https://stackoverflow.com/questions/14531993
复制相似问题