c++11 可变参数模板函数
c++11 可变参数模板函数
#define _CRT_SECURE_NO_WARNINGS #include <iostream>
#include <string>
#include <vector>
#include <map> // 在C++11之前,类模板和函数模板只能含有固定数量的模板参数。C++11增强了模板功能,允许模板定义中包含0到任意个模板参数,这就是可变参数模板。 // 可变参数模板和普通模板的语义是一样的,只是写法上稍有区别,声明可变参数模板时需要在typename或class后面带上省略号“...”
/*
省略号“...”的作用有两个:
1) 声明一个参数包,这个参数包中可以包含0到任意个模板参数
2) 在模板定义的右边,可以将参数包展开成一个一个独立的参数
*/
template<class ... T>
void func(T ... args) // T叫模板参数包,args叫函数参数包
{//可变参数模板函数 } func(); // OK:args不含有任何实参
func(); // OK:args含有一个实参:int
func(, 1.0); // OK:args含有两个实参int和double // 一个可变参数模板函数的定义
template<class ... T> void func1(T ... args)
{//可变参数模板函数
//sizeof...(sizeof后面有3个小点)计算变参个数
cout << "num = " << sizeof...(args) << endl;
} // 通过递归函数展开参数包,需要提供一个参数包展开的函数和一个递归终止函数。
//递归终止函数
void debug()
{
cout << "empty\n";
} //展开函数
template <class T, class ... Args>
void debug(T first, Args ... last)
{
cout << "parameter " << first << endl;
debug(last...);
} // 非递归方式展开
template <class T>
void print(T arg)
{
cout << arg << endl;
} template <class ... Args>
void expand(Args ... args)
{
int a[] = { (print(args), )... };
} void mytest()
{
func1(); // num = 0
func1(); // num = 1
func1(, 1.0); // num = 2 debug(, , , );
/*
运行结果:
parameter 1
parameter 2
parameter 3
parameter 4
empty
*/ expand(, , , ); return;
} int main()
{
mytest(); system("pause");
return ;
}
c++11 可变参数模板函数的更多相关文章
- c++11 可变参数模板类
c++11 可变参数模板类 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #inc ...
- 泛化之美 —— C++11 可变参数模板的妙用
概述 首先这篇文章出自博客园作者:[qicosmos ],我对本文的实例代码进行了学习.思考和整理纠正,理清了文章的全部细节,觉得这是一篇让我受益匪浅的文章.之所以会接触「可变参数模板」这部分的内容, ...
- C++11 可变参数模板构造string列表
#include <iostream> #include <cstdint> #include <list> #include <string> tem ...
- C++反射机制:可变参数模板实现C++反射(使用C++11的新特性--可变模版参数,只根据类的名字(字符串)创建类的实例。在Nebula高性能网络框架中大量应用)
1. 概要 本文描述一个通过C++可变参数模板实现C++反射机制的方法.该方法非常实用,在Nebula高性能网络框架中大量应用,实现了非常强大的动态加载动态创建功能.Nebula框架在码云的仓库地 ...
- C++反射机制:可变参数模板实现C++反射
1. 概要 本文描述一个通过C++可变参数模板实现C++反射机制的方法.该方法非常实用,在Nebula高性能网络框架中大量应用,实现了非常强大的动态加载动态创建功能.Nebula框架在Github ...
- 第27课 可变参数模板(8)_TupleHelper
1. TupleHelper的主要功能 (1)打印:由于tuple中的元素是可变参数模板,外部并不知道内部到底是什么数据,有时调试时需要知道其具体值,希望能打印出tuple中所有的元素值. (2)根据 ...
- 第25课 可变参数模板(6)_function_traits和ScopeGuard的实现
1. function_traits (1)function_traits的作用:获取函数的实际类型.返回值类型.参数个数和具体类型等.它能获取所有函数语义类型信息.可以获取普通函数.函数指针.std ...
- C++反射机制:可变参数模板实现C++反射(二)
1. 概要 2018年Bwar发布了<C++反射机制:可变参数模板实现C++反射>,文章非常实用,Bwar也见过好几个看了那篇文章后以同样方法实现反射的项目,也见过不少从我的文章抄过去 ...
- 第26课 可变参数模板(7)_any和variant类的实现
1. any类的实现 (1)any类: ①是一个特殊的,只能容纳一个元素的容器,它可以擦除类型,可以将何任类型的值赋值给它. ②使用时,需要根据实际类型将any对象转换为实际的对象. (2)实现any ...
随机推荐
- NO--11关于"this"你知道多少
为了更好地理解 this,将 this 使用的场景分成三类: 在函数内部 this 一个额外的,通常是隐含的参数. 在函数外部(顶级作用域中): 这指的是浏览器中的全局对象或者 Node.js 中一个 ...
- jar包冲突常用的解决方法
jar包冲突常见的异常为找不到类(java.lang.ClassNotFoundException).找不到具体方法(java.lang.NoSuchMethodError).字段错误( java.l ...
- Docker--删除容器实例和镜像
一.删除容器实例 使用命令docker rm 容器ID或者容器名 1.docker ps -a查询已有的实例 [root@cxt data]# docker ps -a 2.docker rm 容器I ...
- Web服务架构
# Web服务架构 ### Web服务模型-- 服务提供者.服务请求者.服务注册中心,服务注册中心是一个可选的角色. 现在的Web服务不仅限于WSDL,还有RESTful. - 服务提供者.即Web服 ...
- ats缓存规则
一. 用户访问过程:1. ats收到一个用户对web对象的请求;2. 使用该地址, ats尝试着在其对象数据库(缓存)中用被请求对象的地址来定位该对象;3. 如果对象在缓存中, ats会检查该对象是否 ...
- [Hanani]高数相关知识记录
分部积分 \(\int uv'{\rm d}x=uv-\int u'v{\rm d}x\)
- python3.6环境中django2.0与xadmin0.6结合的后台管理
1.xadmin简介 django的admin管理后台页面很简洁,对个人来说做后台管理非常简单:xadmin的比较admin优化界面,看着也舒服. xadmin界面效果如下: 2.xadmin安装 从 ...
- SDWebImage 错误汇总
1. [UIImageView sd_setImageWithURL:placeholderImage:]: unrecognized selector sent to instance 打包静态库 ...
- PLSQL Developer windows 64位连接数据库的问题
使用PLSQL Developer 工具连接到数据库进行开发,目前主流windows 系统都是64位操作系统,而PLSQL Developer 只有32位程序,所以在连接数据库上遇到一些问题. PL ...
- Shell重新学习(忘光了)
成功和失败都放同一个文件 调试shell