可变参数模板可以创建任意个参数的模板函数和模板类,本文主要介绍可变参数模板函数。
1.1可变参数模板函数声明和定义
template<typename... Args> //Args是一个模板参数包
void Show(Args... args) //args是一个函数参数包
{
//函数功能
return;
}
由上面代码可知,Args是一个模板参数包,args是一个函数参数包,都表示一系列的参数。
可变参数模板函数一般用于可变参数输出,可变参数args的调用不能用args[2]方式调用,可以采用递归展开和非递归展开。下面示例给出了两种递归展开和非递归展开用法。
1.2可变参数模板函数调用示例
/*定义和声明一个多参数模板函数,递归方式展开*/
void Show1(){} //定义零个参数函数,递归调用到零个参数函数时。调用该函数,然后终止继续递归
template<typename T,typename ... Args> //Args是一个模板参数包
void Show1(const T &value,const Args &... args) //args是一个函数参数包
{
qDebug()<<"Show1 value=="<<value;
Show1(args...); //递归调用,依次展开每个参数。不能用args[2]方式调用,只能依次展开
}
/*定义和声明一个多参数模板函数,非递归方式展开*/
template<typename T>
void Print(T arg)
{
qDebug()<<"Sh