例子一:
#include <iostream>
// 递归终止函数
void print() {
std::cout << std::endl;
}
// 递归函数模板,打印第一个参数并递归打印剩余参数
template <typename T, typename... Args>
void print(T first, Args... args) {
std::cout << first << " ";
print(args...);
}
int main() {
print(1, 2.5, "Hello", 3.14f);
return 0;
}
在上面的示例中,我们定义了一个名为 print 的函数模板,该模板使用可变参数模板来实现参数数量可变的功能。在 print 函数模板中,我们首先定义了一个递归终止函数 print,它不接受任何参数并在递归到最后一个参数后结束。然后,我们定义了一个模板函数 print,它接受一个参数 first 和一个参数包 Args...,并递归地打印参数 first 并调用自身来处理剩余的参数。
例子二:
#include <iostream>
#include <initializer_list>
// 使用 initializer_list 实现可变参数求和
int sum(std::initializer_list<int> args) {
int result = 0;
for (int value : args) {
result += value;
}
return result;
}
int main() {
std::cout << sum({1, 2, 3, 4, 5}) << std::endl; // 输出 15
std::cout << sum({10, 20, 30}) << std::endl; // 输出 60
return 0;
}
在上面的示例中,我们定义了一个 sum 函数,它接受一个 std::initializer_list<int> 作为参数,这个参数允许我们传递一个整数列表作为参数。在 sum 函数中,我们使用了 for 循环来遍历列表中的所有值,并计算它们的总和。
在 main 函数中,我们使用了 sum 函数来计算不同列表中所有整数的总和。通过使用 std::initializer_list,我们可以实现函数参数为可变参数的功能。
这个例子展示了另一种使用可变参数的方式,通过使用 std::initializer_list 来实现函数参数为可变参数的功能。
如果 可变参数为 std::vector:
#include <iostream>
#include <vector>
int sum(const std::vector<int>& values) {
int result = 0;
for (int value : values) {
result += value;
}
return result;
}
int main() {
std::vector<int> vec1 = {1, 2, 3, 4, 5};
std::vector<int> vec2 = {10, 20, 30};
std::cout << sum(vec1) << std::endl; // 输出 15
std::cout << sum(vec2) << std::endl; // 输出 60
return 0;
}