函数模板的定义使用关键字 template
,后跟模板参数列表和函数原型。函数模板的语法形式如下:
template <模板参数列表>
返回类型 函数名(参数列表) {
// 函数体
}
在函数模板中,模板参数列表是一组用逗号分隔的模板参数,可以包含类型参数、非类型参数和模板参数的默认值。模板参数在函数原型和函数体中可以被使用,用于定义函数的通用形式。
下面是一个简单的函数模板示例,用于交换两个变量的值:
template <typename T>
void swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
在上述示例中,<typename T>
表示一个类型参数 T
,用于指定待交换值的类型。函数原型中的参数类型使用了类型参数 T
,并且在函数体中可以直接使用类型参数来操作变量。
函数模板可以通过在调用时推断模板参数,也可以显式指定模板参数。下面是函数模板的使用示例:
int main() {
int a = 5, b = 10;
swap(a, b); // 自动推断模板参数
double x = 2.5, y = 4.7;
swap<double>(x, y); // 显式指定模板参数
return 0;
}
在上述示例中,swap(a, b)
的调用自动推断模板参数为 int
,而 swap<double>(x, y)
显式指定了模板参数为 double
。
函数模板可以用于定义通用的函数形式,适用于不同类型的参数。在实际使用中,可以根据具体的需求定义和使用函数模板,提高代码的复用性和灵活性。