c++模板--函数模板
1 函数模板
什么是函数模板?
通过下面的例子,我们来了解一下什么是函数模板。
假设:我们需要两个数据交换的函数,例如int数据交换和double数据交换。我们的代码实现如下:
#include <iostream>
using namespace std;
// int数据交换
void SwapInt(int& a,int& b)
{
int temp = a;
a = b;
b = temp;
}
// double数据交换
void SwapDouble(char& a,char& b)
{
char temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10, b = 20;
SwapInt(a,b);
cout << "a = " << a << " b = " << b << endl;
double c = 1.5, d = 3.14;
SwapInt(c,d);
cout << "c = " << c << " d = " << d << endl;
return 0;
}
我们需要使用两个函数SwapInt和SwapDouble来实现int数据交换和double数据交换。
如果,我们使用函数模板,只需要一个函数模板即可,不仅实现了int数据交换和double数据交换,同时,此函数模板还可以实现char数据交换等等。代码如下:
#include <iostream>
using namespace std;
// 函数模板,将类型作为参数传递进来,传递int就是Int类型交换,传递double就是double类型交换
// T是一个通用的数据类型
template<typename T> // typename 和 class 都是一样的,用哪个都可以
void MySwap(T& a,T& b)
{
T temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10, b = 20;
//1. 这里有个需要注意点,函数模板可以自动推导参数的类型
MySwap(a,b);
cout << "a = " << a << " b = " << b << endl;
double c = 1.5, d = 3.14;
//2. 函数模板可以自动类型推导,那么也可以显式指定类型
MySwap<double>(c,d);
cout << "c = " << c << " d = " << d << endl;
return 0;
}
用模板是为了实现泛型,可以减轻编程的工作量,增强函数的重用性。