在C++中,可变参数模板允许您创建接受任意数量参数的函数或类。要设置可变参数模板,请遵循以下步骤:
template<...>
指定模板参数包(parameter pack)。...
表示参数包。下面是一个简单的可变参数模板示例,用于计算给定参数的和:
#include <iostream>
// 声明可变参数模板函数
template<typename T, typename... Args>
T sum(T first, Args... rest);
// 定义可变参数模板函数
template<typename T, typename... Args>
T sum(T first, Args... rest) {
return first + sum(rest...);
}
int main() {
int a = 1;
double b = 2.0;
char c = '3';
std::cout << "Sum: " << sum(a, b, c) << std::endl; // 输出:Sum: 6
return 0;
}
在这个例子中,我们声明了一个名为sum
的可变参数模板函数,它接受一个类型为T
的参数和一个参数包Args... rest
。然后,我们使用递归模板展开处理参数包,计算所有参数的和。
请注意,这个示例仅适用于单个参数包的情况。如果您需要处理多个参数包,可以使用可变参数模板展开,如下所示:
#include <iostream>
// 声明可变参数模板函数
template<typename... Packs>
auto sum_all(Packs... packs) -> decltype(packs...);
// 定义可变参数模板函数
template<typename... Packs>
auto sum_all(Packs... packs) -> decltype(packs...) {
return (packs + ...);
}
int main() {
int a = 1;
double b = 2.0;
char c = '3';
std::cout << "Sum all: " << sum_all(a, b, c) << std::endl; // 输出:Sum all: 6
return 0;
}
在这个例子中,我们声明了一个名为sum_all
的可变参数模板函数,它接受任意数量的参数包。然后,我们使用可变参数模板展开处理参数包,计算所有参数的和。