1.什么叫做variadic template?
variadic可变的,连起来就是数量不定的模板参数。
2.语法上怎么写?
直接用例子:
template<typename T,typename... TYpes>
void print(const T& firstArg,const Types&... args)
{
cout<<firstArg<<endl;
print(args...);
}
注意三个点不是省略,而是语法。将这个分为一个和一大块。
以这个例子,当我们调用的时候:
print(7.5,"hello",bitset<16>(377),42);
7.5就是firstArg。
然后又将后面的一大块传给自己,递归下去。下一次递归“hello”就是firstArg,得到的结果就是:
7.5
hello
00000000101111001
42
当然,bitset是有重载<<这个符号。等到最后一个42的时候,就会分为一个和0个,当0个传进去就会失败
所以必须再写一个版本:
void print()
{
}
也就是到最后0个的时候,编译器会选择用这个,所以停止了。
3. ...三点其实是一个所谓的pack(包)
用于template parameter 就是template parameter pack(模板参数包)
用于function template parameter types 就是function parameter pack(函数参数类型包)
用于function parameters就是function parameters pack(函数参数包)
4.如果我们想知道这个包有多少个:
用sizeof...(args)这就直到那一包有多少个。
,