0.简介
模板可变参数是一种可以变化模板中类型参数个数并且令类或者函数支持多种不同类型参数,和不定参数个数的神奇玩法。
1.print函数
设计一个print函数,希望可以有如下效果。
print(1);
print(1,3.2);
print(1,9.9,"abc");
同一个函数可以接收可变个数目和不同类型的参数,需要模板和可变参数同时配合。
下面这段代码中,arg...就是可变参数的一个"包",其实里面有多个参数捏在一起,先可以这么理解,当调用print(1,2,3,4,5)的时候,1会分配到data上去,2,3,4,5会分配到args,然后继续递归下去,最终只剩下5自己的时候,5被分配到data上,args是个空包,然后print(args...)是个空.
template<typename T,typename... Args>
void print(T data,Args... args)
{
cout<<data<<" ";
print(args...);
}
此时就需要有一个无参数的print函数来支持参数是空的情况,完整写法如下.
void print()
{
cout<<endl;
}
template<typename T,typename... Args>
void print(T data,Args... args)
{
cout<<data<<" ";
print(args...);
}
这样一来就可以了,print()用来接收空参数,并且输出一个换行.
print(1,2,4.1);
print(1,5,9.1,"hello");