因此,在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问题,或者还有其他方法
在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对其进行修改。
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |