当前位置: 首页 > news >正文

万能引用 + MLIR 源代码示例解析

万能引用是让函数同时接受左值(变量原始类型,引用)和右值(临时变量,std::move 返回值)作为引用形式的参数的一种方法。

这是一段来自 MLIR 项目的源代码,用于遍历 IR 对其执行操作:

template <WalkOrder Order = WalkOrder::PostOrder,typename Iterator = ForwardIterator, typename FnT,typename RetT = detail::walkResultType<FnT>>
std::enable_if_t<llvm::function_traits<std::decay_t<FnT>>::num_args == 1,RetT>
walk(FnT &&callback) {return detail::walk<Order, Iterator>(this, std::forward<FnT>(callback));
}

该函数接受四个模板参数,分别是:

  • Order非类型模板参数(NTTP),通过传入枚举类 WalkOrder 控制函数行为

  • Iterator,控制遍历时从第一个访问到最后一个子节点(Iterator),还是反之(ReverseIterator

  • FnT,执行实际操作的可调用对象(Callable),可以是普通函数,函数指针,函数左/右值引用,Lambda 表达式,Funtor(重载了操作符 () 的类或结构体),std::bind 绑定表达式,std::function<R(Args...)> 类型擦除包装器

  • RetT,传入的函数的返回类型

上述代码中通过使用 std::forward<FnT>(callback) 通过 FnT 保留的函数原始类型,实现对参数的无损转发。

walk(FnT &&callback) 这里就是万能引用,无论传入的参数是什么类型都可以转化成引用形式:

  • 实参:X 类型左值表达式(具名变量 X x、右值引用变量名 rr 等一切左值)

    推导规则:万能引用特殊推导 → FnT = X&
    引用折叠:FnT&& = X& && = X&
    示例:

    int x;
    walk(x); // x 是int左值表达式
    int&& rr = std::move(x);
    walk(rr); // rr 变量类型int&&,但表达式rr是左值,同样走本条
    
  • 实参:X 类型右值表达式(字面量、临时对象、std::move(变量)

    推导规则:FnT = X(裸类型,不带引用)
    引用折叠:FnT&& = X && = X&&
    示例:

    walk(10); // 字面量纯右值
    walk(std::move(x)); // move生成亡值(右值)
    walk(std::move(rr));
    walk(MyOp{}); // 临时对象纯右值
    
http://www.jsqmd.com/news/1223127/

相关文章:

  • 2026年7月工业软管供应领域专业评估:宜兴德蒙特管业有限公司PTFE管材系列全解析 - 甄选服务推荐
  • 亲身探访南京天梭官方售后服务中心|最新维修地址与24小时热线(2026年7月最新) - 天梭服务中心
  • 2026年甘肃地区医用硅岩净化板专业厂家综合分析与电话指南 - 品牌鉴赏官2026
  • 2026年智能电销外呼系统推荐-ASR识别率、线路稳定性、合规资质深度测评 - 资讯焦点
  • 南昌青云谱区三家店街道亨得利官方钟表服务中心电话公示(2026年7月最新) - 亨得利官方
  • # 武汉离婚财产纠纷难解决?2026年这5家离婚律师推荐 - 本地品牌推荐
  • 2026年7月亲身探访温州亨得利官方名表服务中心|全新服务电话及详细地址 - 亨得利官方博客
  • 2026找合规服务 浙江能做全时段AI直播的团队参考分享 - 奔跑123
  • 劳力士售后保养维修服务流程与注意事项权威公示(2026年7月最新) - 劳力士服务中心
  • 讲真的2026年宝鸡离婚律师怎么选 5位家事实战派值得推荐 - 本地品牌推荐
  • 2026年学生党寄电动车攻略:避坑指南与高性价比托运方案解析 - 快递物流资讯
  • 2026年7月最新宝玑泰州万象城维修保养服务电话 - 亨得利钟表维修中心
  • 2026年7月最新美度南京高淳宝龙广场维修保养服务电话 - 亨得利钟表维修中心
  • 赤峰劳动工伤赔偿纠纷解决难?2026年这5家劳动法律师推荐 - 本地品牌推荐
  • 2026经营线下小店之余 留意浙江AI营销相关的外包团队 - 奔跑123
  • 2026年专业芳疗精油直销工厂剖析:花木春夏精油的综合实力与选择指南 - 品牌鉴赏官2026
  • 2026年7月最新爱彼泉州鲤城万达广场维修保养服务电话 - 爱彼中国官方服务中心
  • 2026年 金相机/金相切割机/金相镶嵌机/金相研磨机/金相抛光机/金相磨抛机厂家推荐榜:专业制样与精密检测设备深度解析 - 甄选服务推荐
  • 上海展厅设计公司实力排行:5家主流机构实测盘点 - 互联网科技品牌测评
  • 电动夹爪选型要点:2026年主流电动夹爪生产厂家盘点 - 品牌深度评测
  • 百达翡丽官方更换原装表带价格查询|服务电话及全部维修地址权威信息公告(2026年7月最新) - 百达翡丽服务中心
  • 2026 年更新:新抚专业的钢制散热器加工厂深度解析,熬夜游戏党自救:这玩意儿真的能拯救你的电脑温度吗? - 行业推荐官【官方】
  • 亲身探访温州亨得利官方名表服务中心|网点地址及官方客服电话(2026年7月更新) - 亨得利官方
  • 2026宁波锁具pvd镀膜加工主流厂商综合评测 - 奔跑123
  • 2026实地考察走访场景梳理五轴加工中心厂家哪家好 - 奔跑123
  • # 赤峰离婚财产分割争议难解?2026年这5家律师专业推荐 - 本地品牌推荐
  • 2026年7月最新帝舵南通启东吾悦广场维修保养服务电话 - 帝舵中国官方服务中心
  • 2026杭州优质GEO优化机构盘点 其才科技相关介绍 - 奔跑123
  • 2026年07月美式五金谷仓门源头厂家实力解析:不锈钢轨道、缓冲器、止摆器、滑轮等关键组件选型参考 - 甄选服务推荐
  • 2026优选 浙江工业气体配送上门服务全场景实测记录 - 奔跑123