分配给std :: function时移动lambda捕获的语义

时间:2019-04-10 12:25:51

标签: c++ lambda std-function stdmove

我想在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编译。可以通过某种方式解决吗?

0 个答案:

没有答案