基础博客:https://blog.csdn.net/qq_35976351/article/details/106985750

折叠表达式同样是运行在编译期间的,先给出基本的规则:

注意,一元表达式只有&&||或者,有缺省值,三者空包的默认值分别是:truefalsevoid()

所有支持的运算符是:

+ - * / % ^ & | = < > << >> += -= *= /= %= ^= &= |= <<= >>= == != <= >= && || , .* ->*

给出一元折叠代码示例:

#include <iostream>template <typename... Args>
auto SubOpRight(Args&&... args) {return (args - ...);
}template <typename... Args>
auto SubOpLeft(Args&&... args) {return (... - args);
}int main() {// ([-1] - [-2]) - [-3]   4auto lv = SubOpLeft(-1, -2, -3);// [-1] - ([-2] - [-3])   -2auto rv = SubOpRight(-1, -2, -3);std::cout << lv << ", " << rv << std::endl;return 0;
}

二元表达式,相当于有了初始值,代码示例:

#include <iostream>template <typename... Args>
auto SubOp2Right(Args&&... args) {return (args - ... - 1);
}template <typename... Args>
auto SubOp2Left(Args&&... args) {return (1 - ... - args);
}int main() {// ((1 - [-1]) - [-2])) - [-3]    7auto lv = SubOp2Left(-1, -2, -3);// [-1] - (([-2] - ([-3] - 1)))    -3auto rv = SubOp2Right(-1, -2, -3);std::cout << lv << ", " << rv << std::endl;return 0;
}

C++模板元编程---折叠表达式相关推荐

  1. 编程实现算术表达式求值_用魔法打败魔法:C++模板元编程实现的scheme元循环求值器...

    本文使用 Zhihu On VSCode 创作并发布 [TOC] 前言 寒假时沉迷C++模板元编程,写了个简单的Scheme元循环求值器.可以用类似Scheme的语法写出这样的C++模板代码: _&l ...

  2. C++模板元编程 入门简介

    最近一直在看STL和Boost,源码里边好多涉及到模板元编程技术,简单了解一下,备忘(Boost Python中的涉及模板元的部分重点关注一下). 范例引入 // 主模板 template<in ...

  3. 现代C++模板元编程基础

    元函数的基础介绍 C++的模板元编程是函数式编程,所以函数是一等公民.一切在编译期间执行的函数都可以称为元函数.元函数有struct和constexpr两种定义方式,前者是一直使用的,后者是C++11 ...

  4. C++ 模板元编程简介

    文章目录 1.概述 2.模板元编程的作用 3.模板元编程的组成要素 4.模板元编程的控制逻辑 4.1 if 判断 4.2 循环展开 4.3 switch/case 分支 5.特性.策略与标签 6.小结 ...

  5. 跟我学c++高级篇——模板元编程之十一鸭子类型

    一.鸭子类型 鸭子类型不是从c++中出现的,duck typing这种称呼在Python中比较多见.那么什么是鸭子类型呢?它是动态类型的一种风格,只要是对象的特征(其方法和属性集)和某个类型一致,就认 ...

  6. 闭关之 C++ 函数式编程笔记(四):monad 和 模板元编程

    目录 第十章 monad 注意 10.1 仿函数并不是以前的仿函数 10.1.1 处理可选值 10.2 monad: 更强大的仿函数 10.3 基本的例子 10.4 range 与 monad 的嵌套 ...

  7. C++高阶必会操作--模板元编程

    泛型编程大家应该都很熟悉了,主要就是利用模板实现"安全的宏",而模板元编程区别于我们所知道的泛型编程,它是一种较为复杂的模板,属于C++的高阶操作了,它最主要的优点就在于把计算过程 ...

  8. 最好的 C++ 模板元编程干货!

    链接 | https://www.cnblogs.com/liangliangh/p/4219879.html 所谓元编程就是编写直接生成或操纵程序的程序,C++ 模板给 C++ 语言提供了元编程的能 ...

  9. 模板元编程实现素数判定

    模板元编程(英语:Template metaprogramming:缩写:TMP)是一种元编程技术,不夸张的说,这项技术开启了一种新的C++编程方式.编译器使用模板产生暂时性的源码,然后再和剩下的源码 ...

最新文章

  1. 从粗放到精细,如何用AI技术实现信息流广告投放的降本增效
  2. xHTML+div布局:三个div,两边div宽度固定,中间div宽度自适应
  3. [算法笔记] 爬楼梯
  4. 牛客题霸 [数组中出现次数超过一半的数字] C++题解/答案
  5. 什么是语音复用设备?
  6. 安卓向服务器发送List数据
  7. NLP《语言模型(二)-- 神经网络NNLM语言模型》
  8. C语言相关问题(1)
  9. 【02】Java进阶:17-单例设计模式、多例设计模式、枚举、工厂设计模式、Lombok
  10. IE疑难杂症之已取消网页导航--该站点安全证书的吊销信息不可用
  11. 工作中常见的两种谬误
  12. 风生水起的VR直播丨VR直播市场何时迎来爆发期?
  13. python解释器cpython的源码简要介绍
  14. Process finished with exit code 1 解决方法
  15. 插装式比例插装阀比例节流阀比例顺序阀放大器
  16. 新的一年强势推荐5个免费的在线工具
  17. Kubeadm安装高可用的K8S集群--多master单node
  18. 中国无线物联网传感器市场现状研究分析与发展前景预测报告(2022)
  19. fastjson首字母大写的几种方法
  20. TIA博途V16版本中如何进行项目的归档和恢复?

热门文章

  1. python网络爬虫学习笔记(二):爬虫基本概述
  2. 火车进出栈问题(高精度+压位+质因数分解消除除法)
  3. 01背包问题-一维数组实现原理
  4. 4-2 面向复用的软件构造技术
  5. Jupyter Lab——无法显示matplotlib绘制的图像
  6. LeetCode 242. 有效的字母异位词 (计数排序思想字符处理)
  7. java对象的浅克隆和深克隆
  8. 龙腾世纪:起源(推荐一个可以用来英语学习的RPG游戏)
  9. Java IO实战操作(四)
  10. C语言函数名以及取地址的区别和联系