相关疑难解决方法(0)

lambda函数可以递归吗?

可能重复:
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的表达式,因此它可以递归调用自身?

c++ recursion lambda c++11

82
推荐指数
1
解决办法
3万
查看次数

dummy()函数 - 应该是什么?

所以昨天我在这里读了这个问题并且发现了最好的投票答案,我用这样的代码来递归地调用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().

c++ c++11

34
推荐指数
2
解决办法
7223
查看次数

是否有可能在C++中创建一个可以自行调用的实际函数类型?

我试图通过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)

c++ recursion

10
推荐指数
1
解决办法
312
查看次数

标签 统计

c++ ×3

c++11 ×2

recursion ×2

lambda ×1