跳转到主要内容
模块 8 · 第 1 课(共 2)课程中的17/18~12 min
模块课程(1/2)

函数模板

模板允许用 C++ 编写通用代码。通过模板,我们可以定义对泛型类型参数进行操作的函数或类,让编译器为请求的特定类型生成实际代码。

定义函数模板

要定义函数模板,我们在函数定义之前添加 template 关键字,后跟尖括号 <> 中括起来的类型参数列表。通常,typename 或 class 用于声明泛型类型。

C++
// T is the generic type parameter
template <typename T>
T add(T a, T b) {
    return a + b;
}

函数调用和模板参数推导

当我们调用函数时,我们可以在尖括号中显式指定类型:

C++
int res1 = add<int>(5, 10);
double res2 = add<double>(3.14, 2.71);

然而,C++ 编译器通常能够从传递的输入参数中自动**推导类型(模板参数推导):

C++
int res1 = add(5, 10); // The compiler deduces that T is int

自己尝试一下

锻炼#cpp.m8.l1.e1
尝试:0加载中...

定义一个名为 myMax 的函数模板,它接受两个泛型类型 T 的参数并返回两者中较大的一个。

正在加载编辑器...
显示提示

首先编写“template <typename T>”,后跟签名“T myMax(T a, T b)”。

3 次尝试后可用的解决方案

锻炼#cpp.m8.l1.e2
尝试:0加载中...

编写一个名为 printPair 的函数模板,它接受两个不同泛型类型 T1 和 T2 的参数,并使用 std::cout 打印以空格分隔的两个参数。

正在加载编辑器...
显示提示

模板声明必须指定两个参数:“template <typename T1, typename T2>”。

3 次尝试后可用的解决方案