可能重复:
c ++ 0x中的递归lambda函数
这是一个普通的旧递归函数:
int fak(int n)
{
return (n <= 1) ? 1 : n * fak(n - 1);
}
Run Code Online (Sandbox Code Playgroud)
我如何编写像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
Run Code Online (Sandbox Code Playgroud)
是否有任何表达当前lambda的表达式,因此它可以递归调用自身?
所以昨天我在这里读了这个问题并且发现了最好的投票答案,我用这样的代码来递归地调用lambda
std::function<void(int)>
f {[&f](int i){
// do something
}},
dummy((f(3), nullptr));
Run Code Online (Sandbox Code Playgroud)
我想知道这个dummy(...)部分是什么,所以我做了一些研究但却找不到任何关于它的东西.在答案中提供的代码片段中<utility>使用了标题,所以我想那个东西必须在那里声明,但我仍然找不到任何关于它的东西.
有人可以解释一下这个dummy函数(或仿函数)做了什么,声明它的位置以及它通常用于什么?
我的意思是显然在示例中它用于调用函数f.但它的实际目的是什么?
注意:我知道这个问题有点宽泛,但由于我找不到任何有关它的信息,我无法将问题集中在一个特定的问题上.此外,我希望我的问题的答案将帮助其他人找到有关神秘的信息dummy().
我试图通过Y-combinator在C++中引用函数名来编写递归.但是,我无法在以下尝试中找出函数的类型:
#include <iostream>
using std::cin;
using std::cout;
template<class Function> unsigned long factorial1(Function self, unsigned long n) {
return n ? n * self(self, n - 1) : 1;
}
unsigned long factorial(unsigned long n) {
return factorial1(factorial1, n);
}
int main() {
unsigned long n;
cin >> n;
cout << factorial(n) << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器不能推断出什么是Function,我也不能.然后我尝试了以下内容:
#include <iostream>
using std::cin;
using std::cout;
struct Factorial {
template<class Function> unsigned long operator()(Function self, unsigned long n) const {
return …Run Code Online (Sandbox Code Playgroud)