blA*_*s1N 8 c++ lambda c++11 std-function
在将 lambda 转换为 的过程中是否复制了捕获的参数std::function?
我需要将捕获不可复制类型的 lambda 转换为std::function.
所以我将一个 lambdastd::function作为右值传递给,但发生了错误。
// Foo is non-copyable.
auto a = [f = Foo()]{ };
std::function<void()> b = std::move(a) // error, calls deleted Foo::Foo(const Foo&);
Run Code Online (Sandbox Code Playgroud)
是的,std::function要求函数对象是CopyConstructible并且不能与仅移动函数对象一起使用。
类型要求
F必须满足Callable和CopyConstructible的要求。
您可以将 lambda 包装成std::reference_wrapperlike std::function<void()> b = std::ref(a);,但是您必须小心 lambda 对象的生命周期。或者您可以尝试停止使用std::function并直接使用 lambda;尤其是在模板上下文中。
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |