
可变参数列的模板就是模板的参数个数不确定
基本语法形式
函数模板
template
两个术语or概念 - parameter pack … args - parameter expansion args …
// C++ program to demonstrate working of
// Variadic function Template
#include <iostream>
using namespace std;
// To handle base case of below recursive
// Variadic function Template
void print()
{
<< "I am empty function and "
"I am called at last.\n";
}
// Variadic function Template that takes
// variable number of arguments and prints
// all of them.
template <typename T, typename... Types>
void print(T var1, Types... var2)
{
cout << var1 << endl;
print(var2...);
}
// Driver code
int main()
{
print(1, 2, 3.14,
"Pass me any "
"number of arguments",
"I will print\n");
return 0;
}
这样的模板编译器如何resolve?工作流程如下:
上面的ariadic 函数模板print如何展开?
语句print(1, 2, 3.14, “Pass me any number of arguments”, “I will print\n”); i, 以如下形式被展开:
首先,编译器resolve该语句为:
cout<< 1 <<endl ;
print(2, 3.14, "Pass me any number of arguments",
"I will print\n");
以此类推:
cout<< 2 <<endl ;
print(3.14, "Pass me any number of arguments",
"I will print\n");
继续展开,都是县取出第一个参数:
cout<< 3.14 <<endl ;
print("Pass me any number of arguments",
"I will print\n");
继续:
cout<< "Pass me any number of arguments" <<endl ;
print("I will print\n");
直到最后一个参数:
cout<< "I will print\n" <<endl ;
print();
这里主要简单复习了一下函数模板,可变参数的类模板更丰富一些
Variadic 类模板
【todo】
小结一下
- 参数包
- 参数展开
- elipsis:省略号三个点...
- parameter vs argument
- fold expressions?

评论