C++可变参数模板函数基本用法

可变参数模板可以创建任意个参数的模板函数和模板类,本文主要介绍可变参数模板函数。

1.1可变参数模板函数声明和定义

template  //Args是一个模板参数包
void Show(Args... args)     //args是一个函数参数包
{
    //函数功能
    return;
}

由上面代码可知,Args是一个模板参数包,args是一个函数参数包,都表示一系列的参数。

可变参数模板函数一般用于可变参数输出,可变参数args的调用不能用args[2]方式调用,可以采用递归展开和非递归展开。下面示例给出了两种递归展开和非递归展开用法。

1.2可变参数模板函数调用示例

/*定义和声明一个多参数模板函数,递归方式展开*/
void Show1(){}   //定义零个参数函数,递归调用到零个参数函数时。调用该函数,然后终止继续递归
template  //Args是一个模板参数包
void Show1(const T &value,const Args &... args)     //args是一个函数参数包
{
    qDebug()<<"Show1 value=="<
void Print(T arg)
{
    qDebug()<<"Show2 Print(arg)=="<
void Show2(Args ... args)
{
    int a[]={(Print(args),0)...};
    for(uint i=0;i

C++可变参数模板函数基本用法_第1张图片

1.3总结

由上面代码可知,模板函数Show1()为递归调用方式,模板函数Show2()为非递归调用方式。一般来说,递归调用方式安全可控,而非递归调用方式调用次数比较难以控制。

 

 

参考内容:

《C++ Primer Plus》(第6版)中文版  827-831页(参考:可变参数模板函数)

https://www.cnblogs.com/lsgxeva/p/7787500.html(参考:非递归展开方式)

你可能感兴趣的:(C++应用积累)