C++11 新特性之 变长參数模板
2024-08-25 00:22:16
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;
}
最新文章
- Javascript 构造函数原型继承机制
- 01 ~ 03 headfirst php &; mysql
- 深入理解gradle编译-Android基础篇
- svn out of date
- Map学习
- Digest [information value filtering]
- 白话CSS3的新特性
- ajaxPro用法
- ruby迭代起基础
- oracle表空间使用情况查询
- angular项目——小小记事本1
- babel如此简单
- mongodb 定时备份
- HTML5 Canvas爱心时钟代码
- UVA - 11732 ";strcmp()"; Anyone? (trie)
- 二、Java神经网络框架Neuroph的使用和架构分析
- Python使用MySQLConnector/Python操作MySQL、MariaDB数据库
- 如何使用Maven scope
- 本地Run Page时报检测到意外的 URL 参数,它将被忽略。
- Java利用 ganymed-ssh2-build.jar来上传文件到linux以及下载linux文件以及执行linux shell命令
热门文章
- hdu 1115(多边形重心问题)
- Spring Mvc中@ResponseBody中文乱码解决,以及修改返回的Content-Type
- 大话PHP设计模式
- python——入门系列(一)索引与切片
- hdu6127
- RabbitMQ (五) 订阅者模式之分发模式 ( fanout )
- 利用 ildasm 修改被编译后DLL文件
- RPD Volume 168 Issue 4 March 2016 评论5
- 对于scanf和cin的输入输出速度的验证
- 【线性基】【贪心】【独立环】bzoj2115 [Wc2011] Xor