c++ - 有没有办法让函数返回一个函数?
问题描述
所以在 Lua 你可以做这样的事情
local function start(n)
return function()
n = n + 1;
return n;
end;
end
print(start(1)()); --> 2
我听说过模板,但我不想遇到 xy 问题,或者有其他方法吗
解决方案
在 C++ 中,您不能在另一个函数中声明一个函数。幸运的是,我们可以通过使用lambda 表达式创建一个闭包对象来解决这个问题。你的代码,适应那将成为
template <typename Integer>
auto start(Integer n)
{
return [n]() mutable { return ++n; };
}
然后你会像这样使用它
std::cout << start(1)();
关于上面的例子,有几点需要注意。一是抓捕n
。由于闭包对象是在 的范围之外返回的start
,所以我们必须通过值来捕获它,否则闭包将有一个悬空引用。其次,mutable
在lambda表达式中的使用。那是因为默认情况下operator()
是const
. 这意味着您无法修改n
. 使用mutable
删除const
并允许n
修改。
推荐阅读
- python - 如何迭代 JSON 响应并将值存储在 Pandas DF 中?
- javascript - React:在App.js中使用Router在组件之间传递数据(父组件)
- ruby-on-rails - 在 { } 中使用带有 map 的 select 附加空白数组
- python - Python- GetProcAddress 使用 ctypes 返回 NULL
- c# - Math.NET 数值性能差且 CPU 使用率低
- cmake - 为什么 ld 链接器向每个 llvm 函数返回“未定义函数”?
- android - 如何知道 ESP8266 是否在 Android 应用程序的 Firebase 中连接/断开?
- python - 在 Python 3 中使用库“unittest”进行单元测试
- swift - 我从 firebase 检索电子邮件信息的代码有什么问题?
- python - 使用 pd.date_range() 转置 pandas DataFrame 的最快方法