我有以下功能
template<class Function>
void f(Function&& g) {
h(..., [&g](){g();});
}
Run Code Online (Sandbox Code Playgroud)
它是一个f接受函数,lambda或functor作为参数的函数.在它内部调用h我传递lambda 的函数作为通过捕获调用g和接收g的参数.
g还是&g在lambda的捕获区域?如果您g通过引用捕获,即使用&g代码片段中显示的语法,则不会执行任何复制。这是首选方式。仅当 lambda 可能在完成后被调用时才应进行复制,这可能意味着所引用的f对象被破坏。\n在这种情况下,转发可能会更便宜:g
template<class Function>\nvoid f(Function&& g) {\n h(\xe2\x80\xa6, [g=std::forward<Function>(g)] {g();});\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |