在C++中,可变参数模板允许您创建接受任意数量参数的函数或类。要设置可变参数模板,请遵循以下步骤:
- 在函数或类的声明之前,使用
template<...>
指定模板参数包(parameter pack)。 - 在模板参数包内部,使用省略号
...
表示参数包。 - 在函数或类内部,使用递归模板展开(recursive template expansion)或可变参数模板展开(variadic template expansion)处理参数包。
下面是一个简单的可变参数模板示例,用于计算给定参数的和:
#include// 声明可变参数模板函数 template T sum(T first, Args... rest); // 定义可变参数模板函数 template 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// 声明可变参数模板函数 template auto sum_all(Packs... packs) -> decltype(packs...); // 定义可变参数模板函数 template 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
的可变参数模板函数,它接受任意数量的参数包。然后,我们使用可变参数模板展开处理参数包,计算所有参数的和。