我想在lambda内捕获不可复制的对象,然后将lambda分配给std::function
。通过使用std::move()
可以进行捕获,但是分配给std::function
时仍然出现编译错误。
我能想到的最小的复制器是这样的:
#include <functional>
#include <memory>
int main() {
std::unique_ptr<int> foo = std::make_unique<int>(1);
std::function<void()> fun = [foo{std::move(foo)}]{ (*foo)++; };
}
这不能用C ++ 17编译。可以通过某种方式解决吗?