加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将函数转发到c 11中的lambda表达式

发布时间:2020-12-16 04:58:34 所属栏目:百科 来源:网络整理
导读:对于C 11中的Packaged_Task实现 我希望实现我在下面的C 14代码中所表达的内容.换句话说,我想转发一个lambda表达式. templateclass FPackaged_Task(F f) { PromiseR p; _future = p.get_future(); auto f_holder = [f = std::forwardF(f)]() mutable { return
对于C 11中的Packaged_Task实现
我希望实现我在下面的C 14代码中所表达的内容.换句话说,我想转发一个lambda表达式.
template<class F>
Packaged_Task(F&& f) {
    Promise<R> p;
    _future = p.get_future();

     auto f_holder = [f = std::forward<F>(f)]() mutable { return std::move(f); };
 ///...

我知道移植到lambda的变通方法(但不幸的是这个变通方法需要一个默认的可构造对象,在我的例子中,对象通常是没有default-constructor的lambda表达式)

解决方法

如何创建一个在复制构造过程中移动的包装器结构:(.(我知道这很糟糕,让我记住auto_ptr)
template <typename F>
struct Wrapped {
  using Ftype = typename std::remove_reference<F>::type;
  Wrapped(Ftype&& f): f_(std::move(f)) {}

  Wrapped(const Wrapped& o): f_(std::move(o.f_)) {}

  mutable Ftype f_; 
};

template<class F>
Packaged_Task(F&& f) {
    Promise<R> p;
    _future = p.get_future();
     Wrapped<std::remove_reference<decltype(f)>::type> wrap(std::forward<F>(f));

     auto f_holder = [wrap]() mutable { return std::move(wrap.f_); };

这只是一个粗略的想法.未编译或测试.

注意:之前我已经看过这种技术,不记得它是在SO本身还是在某些博客上.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读