替代std :: function与move lambdas一起使用?

时间:2015-12-26 09:34:58

标签: c++ c++11 lambda c++14

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;
};

但我认为只删除复制构造函数和复制赋值运算符就足够了。

0 个答案:

没有答案