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)
可以省略。