描述:
函数模板做的事情就是将函数的参数类型进行抽象化,如下面代码写到的,这是将两个类进行比较,取最小的,这个类可能是int、long、double、复数、年龄类等,如果在一个工程里,多个类都涉及到这种比较,就需要对每个类都写一次这样的比较函数。
因此,函数模板就是为了解决类似问题,当算法一样时,只是参数类型不一样时,将参数类型进行抽象,写出通用函数,这就是函数模板。
#include <iostream>
using namespace std;
template <typename T>
T min(T A, T B)
{
return (A < B) ? A : B;
}
int main()
{
cout << "min:" << min(10, 8);
return 0;
}
当然,读者可能还会关心,模板是如何工作的,编译器是如何识别模板?
请看上述代码,当代码编译到:
cout << "min:" << min(10, 8);
编译器就会去找min的函数定义,发现没有找到匹配类型的函数,只找到了一个函数模板
T min(T A, T B)
这时,编译器就会尝试将min(10,8)往 T min(T A, T B)推导,发现该函数模板符合,T就是int,推导成功,
此时,编译器获得的代码就是
int min(int A, int B)
{
return (A < B) ? A : B;
}