在C++11中,可变参数模板允许函数模板接受任意数量和类型的参数。以下是一个使用可变参数模板的示例,该示例实现了一个简单的函数,该函数可以接受任意数量和类型的参数,并将它们打印到标准输出中。
#include <iostream>
#include <utility> // 为了std::forward
// 基本情况:递归终止条件
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.14, 'c');
// 输出: 1 2.5 Hello 3.14 c
return 0;
}
在这个例子中,`print`函数模板使用了可变参数模板(`Args... args`),它可以接受任意数量的参数。通过递归的方式,我们可以处理所有传入的参数。递归的终止条件是`print()`的无参数版本,它仅仅输出一个换行符。
注意,为了保持参数的原始类型(包括左值引用和右值引用),在更复杂的情况下,你可能需要使用`std::forward`来完美转发参数。然而,在这个简单的示例中,我们直接打印了参数,所以不需要考虑转发。
另外,这个示例演示了可变参数模板在函数模板中的使用,但可变参数模板也可以用于类模板,以支持模板类的构造函数、成员函数等接受可变数量的参数。