作用
及接受可变数量的参数
概念
模版参数包:typename...
Args
Args 是自定义的
Args 可以看做{Arg1,Arg2,Arg3…}
函数参数包:Args...
args
Args继承自模版参数包自定义的名字,args在该句是自定义的
args可以看做{arg1,arg2,arg3…}
如果函数参数包的指向是模版参数包(模版大于1个)则函数的参数的可选类就是多变的,反之
template<typename T > // T不是模版参数包,仅仅是单个模版参数
void myprint(T head,T...rest)
递归展开
#include <iostream>
using namespace std;
//递归终止函数
template<typename T>
void myprint(T end)//递归到最后一次,调用单参数函数
{
cout << "parameter " << end << endl;
}
//展开函数
template<typename T,typename ...Args> //Args是模版参数包{Arg1,Arg2,Arg3....}
void myprint(T head, Args... rest) //rest是函数参数包{rest1,rest2,rest3.....}
{
cout << "parameter " << head << endl;
myprint(rest...);
}
int main()
{
myprint(1, 2, 3, 4);
return 0;
}