int
main()
{
std::vector<std::function<void()>> functions;
auto t1 = std::make_unique<std::packaged_task<int()>>([] {
std::cout << "hello";
return 1 + 1;
});
auto fut = t1->get_future();
auto wrapped_func = [f = std::move(t1)] { (*f)(); };
// err
functions.push_back(std::move(wrapped_func));
}
我想我无法将lambda移动到functions
,因为std::function
要求lambda可以复制。
我认为解决方法是制作一个shared_ptr
并将其复制到我的lambda中,这应该使lambda可以复制,但我想知道是否有一个替代std::function
可以与lambda一起使用那个必须搬家?
编辑:
我也尝试自己创建一个移动功能
template <class Signature>
class move_func;
template <class R, class... Args>
class move_func<R(Args...)> : public std::function<R(Args...)>
{
move_func(const move_func&) = delete;
void operator=(const move_func&) = delete;
};
但我认为只删除复制构造函数和复制赋值运算符就足够了。