可变参数模板

89 阅读1分钟

可变参数模板

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

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

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

改进1

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

改进2

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

改进3

//引用传递
template<typename T ,typename... Args>
void showList(const T& value,const Args&... args)
{
    cout<<value<<", ";
    showList(args);
}