因此在Lua中,您可以执行以下操作
local function start(n)
return function()
n = n + 1;
return n;
end;
end
print(start(1)()); --> 2
我听说过模板,但是我不想遇到xy问题,或者还有另一种方法
答案 0 :(得分:6)
在C ++中,您不能在另一个函数内部声明一个函数。幸运的是,尽管我们可以通过使用lambda expression创建一个闭包对象来解决此问题。您的代码将适应于此
template <typename Integer>
auto start(Integer n)
{
return [n]() mutable { return ++n; };
}
然后您将使用它
std::cout << start(1)();
关于上述示例,需要注意几件事。首先,捕获n
。由于闭包对象是在start
范围之外返回的,因此我们必须按值捕获它,否则闭包将具有悬挂的引用。其次,在lambda表达式中使用mutable
。那是因为默认情况下operator()
是const
。这意味着您无法修改n
。使用mutable
会删除const
,并允许修改n
。
答案 1 :(得分:4)
最简单的方法是返回一个lambda函数对象:
auto start(int n) {
return [n]() mutable {
n = n + 1;
return n;
};
}