2020-05-24 C++ Parameter Pack 可变参数函数模板通常是递归的。第一步调用处理包中的第一个实参,然后用剩余的实参调用自身。为了终止递归,我们还需要定义一个非可变参数的函数模板: 123456789101112131415161718// template specializationtemplate <typename T>void print(const T &t) { std::cout << t;}// 包中除了最后一个元素的输出会调用上面的 `特化模板`,之外的其他元素都会调用这个版本的 printtemplate <typename T, typename...Args>void print(const T &t, const Args&...rest) { std::cout << t << " "; // 打印第一个实参 print(rest...); // 递归调用,打印其他实参}int main() { print("string1", 2, 3.14f, "string2", 42); std::cout << endl; return 0;} Reference C++学习之可变参数的函数与模板 | 神奕的博客 C++的可变参数模板 - 知乎 Parameter pack(since C++11) - cppreference.com