template <typename ... ARGS>
void fun(ARGS ... args)

首先明白几个概念

1,模板參数包(template parameter pack):它指模板參数位置上的变长參数,比如上面样例中的ARGS

2,函数參数包(function parameter pack):它指函数參数位置上的变长參数。比如上面样例中的args

普通情况下 參数包必须在最后面,比如:

template <typename T, typename ... Args>
void fun(T t,Args ... args);//合法 template <typename ... Args, typename T>
void fun(Args ... args,T t);//非法

有一个新的运算符:sizeof...(T) 能够用来获知參数包中打包了几个參数,注意 不是 參数所占的字节数之和。

#include <iostream>
using namespace std; template <typename ...Args> //Args:模板參数包
void func(Args ...args) //args:函数參数包
{
cout << sizeof...(args) << endl;
} int main()
{
func(1, 2, 3, 4, 5); //输出5
return 0;
}

函数实例

一个经常使用的技巧是:利用模板推导机制,每次从參数包里面取第一个元素,缩短參数包,直到包为空。

#include <iostream>
using namespace std; template <typename T>
void func(const T& t)
{
cout << t << endl;
} template <typename T, typename ...Args> //Args:模板參数包
void func(const T& t, Args ...args) //args:函数參数包
{
cout << t << endl;
func(args...);
} int main()
{
func(1, 2, 3, 4, 5);
return 0;
}

最新文章

  1. Javascript 构造函数原型继承机制
  2. 01 ~ 03 headfirst php &amp; mysql
  3. 深入理解gradle编译-Android基础篇
  4. svn out of date
  5. Map学习
  6. Digest [information value filtering]
  7. 白话CSS3的新特性
  8. ajaxPro用法
  9. ruby迭代起基础
  10. oracle表空间使用情况查询
  11. angular项目——小小记事本1
  12. babel如此简单
  13. mongodb 定时备份
  14. HTML5 Canvas爱心时钟代码
  15. UVA - 11732 &quot;strcmp()&quot; Anyone? (trie)
  16. 二、Java神经网络框架Neuroph的使用和架构分析
  17. Python使用MySQLConnector/Python操作MySQL、MariaDB数据库
  18. 如何使用Maven scope
  19. 本地Run Page时报检测到意外的 URL 参数,它将被忽略。
  20. Java利用 ganymed-ssh2-build.jar来上传文件到linux以及下载linux文件以及执行linux shell命令

热门文章

  1. hdu 1115(多边形重心问题)
  2. Spring Mvc中@ResponseBody中文乱码解决,以及修改返回的Content-Type
  3. 大话PHP设计模式
  4. python——入门系列(一)索引与切片
  5. hdu6127
  6. RabbitMQ (五) 订阅者模式之分发模式 ( fanout )
  7. 利用 ildasm 修改被编译后DLL文件
  8. RPD Volume 168 Issue 4 March 2016 评论5
  9. 对于scanf和cin的输入输出速度的验证
  10. 【线性基】【贪心】【独立环】bzoj2115 [Wc2011] Xor