C++可变模板参数的使用

最近在封装打印函数,需要支持不同参数个数和类型,用了函数重载感觉有点麻烦且不太能满足所有的条件。研究了一下C++11的新特性可变模板参数

模板定义:声明可变参数模板时需要在typename或class后面带上省略号“…”。
template
**可变模版参数函数:**可变模版参数传进来的是一个参数包,我们需要将参数包展开。
由于包里面的参数个数是不确定的,可以使用递归的方法展开。
这里注意我们还要准备一个递归终止函数,参数包Args…在展开的过程中递归调用自己,每调用一次参数包中的参数就会少一个,直到所有的参数都展开为止,当没有参数时,则调用非模板函数终止递归过程。

递归终止函数
void PrintStd() 
{ 
    std::cout <<"递归终止" << endl;
}

展开函数
template<typename Type, typename ...Args>
/**
 * @param const Type currentArg   本次展开拿到的参数
 * @param const Args... args      参数包中剩余的参数
 */
void PrintStd(const Type currentArg, const Args... args)
{
    std::cout << currentArg << endl;
    PrintStd(args...);
}
//调用测试
int main()
{
    PrintStd("hello", "world",100);
    return 0;
}

结果输出:
C++可变模板参数的使用_第1张图片

可变模版参数求和

template<typename T>
int getSum(T t) 
{ 
    return t; 
}
template<typename Type, typename ...Args>
int getSum(const Type currentArg, const Args... args)
{
    return  currentArg + getSum(args...); 
}

int main()
{

    int ret=getSum(1,2,3,4,5);
    std::cout << "ret=" << ret << endl;
    return 0;
}

结果输出:ret=15
https://www.cnblogs.com/qicosmos/p/4325949.html

你可能感兴趣的:(c++,开发语言)