Loading

C++构造变长参数的模板函数

SEO

  • parameter pack
  • variadic template

背景

现代C++常产生函数入参数量不确定的需求,例如:

std:vector<int> v_1{1, 2};
std:vector<int> v_2{1, 2, 3, 4};

此时变长参数显得必要。

实现

实现变长参数需要构造模板函数,核心思想是将参数包拆成一个和其他,
递归调用自己直至与到单参数特化结束调用。以求和函数为例:

#include <iostream>

template <typename T>
double sum(T value)
{
    return static_cast<double>(value);
}

template <typename T, typename... Args>
double sum(T value, Args&&... args)
{
    return static_cast<double>(value) + sum(args...);
}

template <typename... Args>
double sum(Args&&... args)
{
    return sum(args...);
}


int main()
{
    std::cout << sum(1,2,3,4,5) << std::endl;
    return 0;
}

注:本例中移动构造函数double sum(Args&&... args)可以省略。

参考

Parameter pack(since C++11) - cppreference.com

posted @ 2022-07-26 17:43  azureology  阅读(137)  评论(0)    收藏  举报