函数模板重载方法
时间: 2023-08-04 08:16:59 浏览: 51
函数模板的重载是指在同一作用域内定义多个同名函数模板,但这些函数模板的参数列表或参数类型不同,从而实现了函数模板的重载。
函数模板重载的方法有两种:
1. 普通函数与函数模板的重载
可以在函数模板的定义前或后定义一个普通函数,这个普通函数与函数模板同名但参数列表或参数类型不同,就可以实现重载。例如:
```cpp
// 普通函数
void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
// 函数模板
template<typename T>
void swap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
```
2. 函数模板之间的重载
可以在同一作用域内定义多个函数模板,这些函数模板同名但参数列表或参数类型不同,就可以实现重载。例如:
```cpp
// 函数模板1
template<typename T>
void print(T data)
{
cout << data << endl;
}
// 函数模板2
template<typename T1, typename T2>
void print(T1 data1, T2 data2)
{
cout << data1 << " " << data2 << endl;
}
```
需要注意的是,函数模板重载的时候,需要注意避免歧义的情况。例如:
```cpp
// 函数模板1
template<typename T>
void foo(T data)
{
// ...
}
// 函数模板2
template<typename T>
void foo(T& data)
{
// ...
}
```
这里的函数模板1和函数模板2都是同名的foo,参数列表也都是一样的,只是第二个参数加了一个引用符号。在这种情况下,编译器无法确定应该调用哪个函数模板,会报错。为避免这种情况,可以采用特化或默认参数的方式来实现函数模板的重载。