C++ 面试题
目录

C++ 中什么是可变参数模板 (variadic template)?

· 约 3 分钟读完 · 第 78 / 181 章

推荐答案

可变参数模板(Variadic Template)是 C++11 引入的一种模板特性,允许模板接受任意数量的模板参数。通过使用 ... 语法,可以在模板定义中表示可变数量的参数。可变参数模板通常用于实现泛型编程,特别是在需要处理不定数量参数的情况下,如元组、函数包装器等。

本题详细解读

1. 基本语法

可变参数模板的基本语法如下:

  • typename... Args 表示 Args 是一个模板参数包,可以接受任意数量的类型参数。
  • Args... args 表示 args 是一个函数参数包,可以接受任意数量的函数参数。

2. 参数包的展开

参数包可以通过递归或折叠表达式展开。递归展开是最常见的方式:

在这个例子中,print 函数可以接受任意数量的参数,并逐个打印出来。

3. 折叠表达式

C++17 引入了折叠表达式,可以更简洁地展开参数包:

这个例子中,折叠表达式 (std::cout << ... << args) 将所有参数依次输出。

4. 应用场景

可变参数模板在以下场景中非常有用:

  • 元组(Tuple):std::tuple 使用可变参数模板来存储任意数量和类型的元素。
  • 函数包装器:如 std::function 和 std::bind,可以使用可变参数模板来处理任意数量和类型的参数。
  • 日志系统:可以接受任意数量的参数并格式化输出。

5. 示例代码

以下是一个使用可变参数模板的完整示例:

输出结果为:

这个示例展示了如何使用可变参数模板来处理不同类型的参数。