码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 2310C++λ中完美转发


    原文
    C++11里面就引入了完美转发概念,通过它,可按参数实际类型转发参数.

    元<型名 T>空 处理(T&t){输出<<"左值\n";}
    元<型名 T>空 处理(T&&t){输出<<"右值\n";}
    元<型名 T>空 测试转发(T&&t){处理(前向<T>(t));}
    整 主(){
      整 i=0;
      测试转发(i);
      测试转发(0);
    }
    //打印
    左值
    右值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    传入左值i时,T&&t就是个左值引用,传入右值0时,T&&t就是个右值引用,再通过前向(t)完美转发参数到处理函数,处理函数输出结果符合期望.

    但是在λ中,如何实现完美转发呢?

    元<型名 T>空 测试捕捉(T&&t){
      动 λ=[参]()可变{
        处理(参);
      };
      λ();
    }
    元<型名 T>空 测试捕捉1(T&&t){
      动 λ=[&参]()可变{
        处理(参);
      };
      λ();
    }
    测试捕捉(i);
    测试捕捉(0);
    //打印
    左值
    左值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    λ无论是按值捕捉还是按引用捕捉,到调用处理时都是一个左值了,只会进入左值引用那个处理函数. C++20中支持完美抓(完美抓捕)的特性,和完美转发类似,可根据实际参数类型实现抓.

    元<型名 T>空 测试捕捉(T&&t){
      动 λ=[参=前向<T>(t)]()可变{
        处理(前向<T>(参));
      };
      λ();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    有了该转发λ捕捉,就得到了实际类型参数,接着通过完美转发调用处理就可得到符合期望结果了.
    如果是可变模板参数,该怎么完美捕捉呢?

    元<型名...T>空 测试捕捉20(T&&...t){
      动 λ=[...参=前向<T>(t)]()可变{
        处理(前向<T>(参)...);
      };
      λ();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在C++17里能不能实现完美捕捉呢?也是可以的.

    元<型名...O>动 测试捕捉17(O&&...o){
      中[o=造元组(前向<O>(o)...)]()可变{
        中 应用(
            [](动&&...o){处理(前向<O>(o)...);},o);
      }();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    这一题的后缀表达式应该怎样求?
    vue3自定义指令的学习和常用的几个自定义指令
    [Dubbo3.0.8源码解析系列]-24- Dubbo应用级服务发现
    从转载阿里开源项目 Egg.js 技术文档引发的“版权纠纷”,看宽松的 MIT 许可该如何用?...
    [贪心算法]Leetcode738. 单调递增的数字
    Windows 电脑查看 WiFi 密码的方法都有哪些?
    二、【React-Router5】路由的基本使用
    权限提升Web篇
    Android入门第10天-Android访问远程Spring Boot提供的Restful API接口
    基于工程车辆/物流车辆/消防车辆远程通信的车队管理解决方案
  • 原文地址:https://blog.csdn.net/fqbqrr/article/details/133513256
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号