//用来终止递归并打印最后一个元素的函数
//此函数必须在可变参数版本的 print 定义之前声明
template<typename T> ostream &print (ostream &os, const T &t)
{return os « t; / / 包中最后一个元素之后不打印分隔符
}// 包中除了最后一个元素之外的其他元素都会调用这个版本的 print
template<typename T, typename...Args> ostream &print(ostream &os, const T &t, const Args &... rest)
{os « t « ", ";//打印第一个实参return print (os, rest...);//递归调用,打印其他实参
}

eg. print (cout, i, s, 42) ; // 包中有两个参数

调用 t rest…
print (cout, i, s, 42) i s , 42
print (cout, s, 42 ) s 42
print (cout, 42 ) 调用非可变参数版本的print

warnning: 当定义可变参数版本的 print 时, 非可变参数版本的声明必须在作用域中。否则, 可变参数版本会无限递归。

C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板举例相关推荐

  1. C++ Primer 5th笔记(chap 16 模板和泛型编程)转发参数包

    1. 使用可变参数模板与 forward 机制来编写函数, 实现将其实参不变地传递给其他函数(保持实参的原始类型) 1.1 eg class StrVec {public:template <c ...

  2. C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板

    1. 可变参数模板( variadic template) 一个接受可变数目参数的模板函数或模板类. 1.1 参数包 (parameter packet) 可变数目的参数被称为参数包,存在两种参数包: ...

  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)std::move

    1. 标准库定义 / / 在返回类型和类型转换中也要用到 typename, 参见 16.1.3 节( 第 593 页 ) reference 是在 16.2.3 节( 第 605 页 ) 中介绍的 ...

  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)效率与灵活性

    1. 标准库智能指针类型 shared_ptr 和 unique_ptr shared_ptr unique_ptr 管理所保存的指针的策略 共享指针所有权 独占指针 用户重载默认删除器的方式 在运行 ...

  5. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板部分特例化

    1. 类模板的部分特例化(partial specialization) 类模板的特例化不必为所有模板参数提供实参(可以只指定一部分而非所有模板参数, 或是参数的一部分而非全部特性).类模板的部分特例 ...

  6. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板特例化

    1. 定义一个特例化版本, 模板参数为 Sales data // 打开std 命名空间, 以便特例化 std::hash namespace std {template struct hash< ...

  7. C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化

    1. 场景 //第一个版本:可以比较任意两个类型 template <typename T> int compare (const T &, const T & );//第 ...

  8. C++ Primer 5th笔记(chap 16 模板和泛型编程)包扩展

    1. 扩展 ( expand) 扩展一个包就是将它分解为构成的元素, 对每个元素应用模式, 获得扩展后的列表. 通过在模式右边放一个省略号(-)来触发扩展操作.当扩展一个包时,我们还要提供用于每个扩展 ...

  9. C++ Primer 5th笔记(chap 16 模板和泛型编程)重载模板和类型转换

    1. C 风格字符串指针和字符串字面常量 cout « debug_rep ("hi world!" ) << endl; / / 调用 debug_rep (T* ) ...

  10. C++ Primer 5th笔记(chap 16 模板和泛型编程)重载与模板

    1. 定义 函数模板可以被另一个模板或一个普通非模板函数重载: 名字相同的函数必须具有不同数量或类型的参数 1.1 函数模板匹配因素 对于一个调用, 其候选函数包括所有模板实参推断成功的函数模板实例. ...

最新文章

  1. 全网刷爆!B站Up主何同学带火这只A股:最硬核桌子,苹果也做不到!
  2. PSP DAILY软件功能说明书
  3. Unity3D 简单的倒计时
  4. 洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
  5. 2012计算机科学排名,2012年美国大学计算机科学专业研究生排名
  6. IntelliJ IDEA 常用设置
  7. 2月份.xyz域名总量10强:西数称王 注册量破百万
  8. Web前后端笔记-通过对称加密算法和信息摘要算法防止数据重放
  9. 【Redis】Redis 使用 redisson 做分布式锁 复盘 maven 依赖 netty 冲突
  10. 全局变量与局部变量的作用域问题
  11. C++ OS 网络 数据库 (面试)
  12. IAR的基本使用教程
  13. vue+html5实现分类、商品分类、类别、菜单的左右层级布局两种不同精美样式
  14. Unity中使用Curvy快速生成路径,并使物体沿着路线运动
  15. 数据分析常用名词解释
  16. 互联网进化论在中国科技论文在线正式发表
  17. python xlsm_“xlwings”:不支持写入.xlsm文件?
  18. 解决使用 Bluetooth Audio Receiver 蓝牙传音卡顿问题
  19. 支持英特尔9242的服务器,宝德2U双子星服务器PR2725TP2
  20. 托福高频真词List08 // 附托福TPO阅读真题

热门文章

  1. 框架:SpringMVC中Interceptor拦截器的两种实现
  2. Java 洛谷 P1482 Cantor表(升级版)
  3. 【阿里云 Linux 服务器】mysql 遇到以下问题Expression #1 of SELECT list is not in GROUP BY clause and contains nonag
  4. MyEclipse 破解文件 run.bat闪退
  5. qt android oci数据库,QT mysql SQLite 数据库支持
  6. ML之FE:基于load_mock_customer数据集(模拟客户,单个DataFrame)利用featuretools工具实现自动特征生成/特征衍生
  7. DayDayUp:三观一致必将取代血缘关系,成为新的人际纽带(博主推荐文章)
  8. BigData之Hadoop:Hadoop的简介、深入理解、下载、案例应用之详细攻略
  9. 成功解决UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 28: illegal multibyte sequenc
  10. Algorithm之RS:RS常用的一些库