(一)首先我们来看非模板程序,函数只是输入不一样的变量就需要构件很多个不一样的函数,那么这样很麻烦,则引入函数模板
int& max(int& a, int& b)
{
return (a < b)? b : a;
}
double& max(double& a, double& b)
{
return (a < b)? b : a;
}
float& max(float& a, float& b)
{
return (a < b)? b : a;
}
(二)函数模板引入:函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。
template<类型形式参数表>
返回类型 函数名(形式参数表)
{
... //函数体
}
#include <iostream>
#include <string.h>
#include <unistd.h>
using namespace std;
template<typename T>
T& mymax(T& a, T& b)
{
cout<<__PRETTY_FUNCTION__<<endl;/*打印函数定义*/
return (a < b)? b : a;
}
int main(int argc, char **argv)
{
int ia = 1;
int ib = 2;
double da = 3;
double db = 4;
mymax(ia, ib);
mymax(da, db);
return 0;
}
运行结果