C++11 新特性之 变长參数模板
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;
}
C++11 新特性之 变长參数模板的更多相关文章
- Java 变长參数Varargs
Varargs (variable arguments)可变长參数是Java 1.5引入的特性. 方法的形參如print(String ... s),实參为随意数目的值. public class V ...
- java 变长參数使用原则
1.java变长參数用...表示,如Print(String... args){ ... }; 2.假设一个调用既匹配一个固定參数方法.又匹配一个变长參数方法,则优先匹配固定參数的方法 3.假设一个 ...
- C语言变长參数的认识以及宏实现
1.认识 变长參数是C语言的特殊參数形式.比如例如以下函数声明: int printf(const char *format, ....); 如此的声明表明,printf函数除了第一个參数类型为con ...
- C99新特性:变长数组(VLA)
C99标准引入了变长数组,它允许使用变量定义数组各维.例如您可以使用下面的声明: ; ; double sales[rows][cols]; // 一个变长数组(VLA) 变长数组有一些限制,它必须是 ...
- Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
新的keyword auto C++11中引入auto第一种作用是为了自己主动类型推导 auto的自己主动类型推导,用于从初始化表达式中判断出变量的数据类型.通过auto的自己主动类型推导.能够大大简 ...
- C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...
- 【C++11】30分钟了解C++11新特性
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 什么是C++11 C++11是曾经被叫做C+ ...
- [转载] C++11新特性
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...
- c++11变长参数函数模板
By francis_hao Mar 25,2018 一个最简单的实例大概是这个样子: #include <iostream>using namespace std; /*变长参 ...
随机推荐
- Liquibase 快速开始
Step 1 :创建Changelog文件,所有的数据库变动都会保存在Changelog文件中 <?xml version="1.0" encoding="UTF- ...
- 使用 gulp 压缩 CSS
请务必理解如下章节后阅读此章节: 安装 Node 和 gulp 使用 gulp 压缩 JS 压缩 css 代码可降低 css 文件大小,提高页面打开速度. 我们接着将规律转换为 gulp 代码 规律 ...
- 如何在windows平台下使用hsdis与jitwatch查看JIT后的汇编码
1. 安装hsids 这一步比较麻烦,需要提前安装cygwin,以及下载openjdk的源码 具体步骤请参考下面的两篇文章 How to build hsdis-amd64.dll and hsdis ...
- python 中sshpass的使用
如何用SSH连接远程服务器有两种方式 1.利用远程软件控制:sshclient.Puttty.secureCRT等 2.终端命令 ssh -p 22 root@服务器ip 密码需要手工交互式输入(2 ...
- BZOJ 1008: [HNOI2008]越狱-快速幂/取模
1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8689 Solved: 3748 Description 监狱有 ...
- C# 用程序读写另一个控制台程序
一. using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.W ...
- HDU 2162(注意初始化位置!)
Add ‘em Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 非负整数可重集去重&排序+获得可重集的全排列的几种方法
非负整数可重集O(n)去重并排序 可重集是指元素可重复的集合,对于在一定区间内的正整数集,比如[1,n],我们可以在不不使用任何额外空间(包括不使用O(1)的空间)的情况下,用O(n)的时间复杂度完成 ...
- Maven学习笔记3
好了,按照笔记2的方法我们创建好一个web项目(使用maven:java项目还是java项目,web项目还是web项目,唯一的变化既是我们在pom.xml中配置了我们本应该先下载然后导入的jar包,这 ...
- 集训考试题(CF510C Fox And Names的简化版)
题目描述给定n个由小写字母组成的字符串,请你求出一个字母表顺序,使得这n个字符串是按照字典序升序排列的,数据保证存在合法的字母表顺序.如果存在多个解,输出字典序最小的那个. 输入格式第一行一个整数n. ...