可变参数模板

可变参数模板

可变参数模板

1
2
3
4
5
template<typename... Args>
void showList(Args... args)
{...}
//Args是模板参数包,这是一个类型列表。args是函数参数包。Args与任意数量的类型匹配,如:
showList('s',30,"hello",5.5)

在可变参数模板函数中使用递归

1
2
3
4
5
template<typename... Args>
void showList(Args... args)
{
showList(args);
}//这样递归会导致无限递归调用

改进1

1
2
3
4
5
6
7
8
9
//改进1
void showList(){}
template<typename T ,typename... Args>
void showList(T value,Args... args)
{
cout<<value<<", ";
showList(args);
}
//每调动一次,参数列表就会减少一项,直到args为空时,将调用不接受任何参数的showList方法。

改进2

1
2
3
4
5
6
7
8
//以上函数在输出列表时,都会在后面增加一个逗号,现在省去最后一个逗号
//增加函数
template<typename T >
void showList(T value)
{
cout<<value<<'\n';
}
//当args中仅仅剩余一项时,会优先调用该函数。、

改进3

1
2
3
4
5
6
7
//引用传递
template<typename T ,typename... Args>
void showList(const T& value,const Args&... args)
{
cout<<value<<", ";
showList(args);
}
作者

步步为营

发布于

2024-05-08

更新于

2025-03-15

许可协议