31-可变参数模板
18.6 可变参数模板
可变参数模板(variadic template)让您能够创建这样的模板函数和模板类,即可接受可变数量的参数。这里介绍可变参数模板函数。例如,假设要编写一个函数,它可接受任意数量的参数,参数的类型只需是cout能够显示的即可,并将参数显示为用逗号分隔的列表。请看下面的代码:
int n = 14;
double x = 2.71828;
std::string mr = "Mr. String objects!";
show_list(n, x);
show_list(x*x, '!', 7, mr);
这里的目标是,定义show_list(),让上述代码能够通过编译并生成如下输出:
14, 2.71828
7.38905, !, 7, Mr. String objects!
要创建可变参数模板,需要理解几个要点:
- 模板参数包(parameter pack);
- 函数参数包;
- 展开(unpack)参数包;
- 递归。