有没有办法让一个函数返回一个函数?

inc*_*paz -1 c++

因此,在Lua中,您可以执行以下操作

local function start(n)
    return function()
        n = n + 1;
        return n;
    end;
end

print(start(1)()); --> 2
Run Code Online (Sandbox Code Playgroud)

我听说过模板,但是我不想遇到xy问题,或者还有其他方法

Nat*_*ica 6

在C ++中,您不能在另一个函数内部声明一个函数。幸运的是,我们可以通过使用lambda表达式创建一个闭包对象来解决此问题。您的代码,适应于此,将成为

template <typename Integer>
auto start(Integer n)
{
    return [n]() mutable { return ++n; };
}
Run Code Online (Sandbox Code Playgroud)

然后你会像

std::cout << start(1)();
Run Code Online (Sandbox Code Playgroud)

关于上述示例,需要注意几件事。首先,捕获n。由于关闭对象是在范围之外返回的start,因此我们必须按值捕获它,否则关闭将有一个悬空引用。其次,mutable在lambda表达式中使用。那是因为默认情况下是operator()is const。这意味着您无法修改n。使用mutable删除const并允许n对其进行修改。