C++编程入门 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

函数模板

#include <iostream>
using namespace std;
int max(int,int);
double max(double,double);
int main()
{
    cout<<"max(3,5)="<<max(3,5)<<endl;
    cout<<"max(5.3,1.5)="<<max(5.3,1.5)<<endl;
    return 0;
}
int max(int x,int y)
{
    return x>y?x:y;
}
double max(double x,double y)
{
    return x>y?x:y;
}

上面的例子就是上一节的重载函数。我们可以发现一个新的问题:两个重载函数的函数体是一样的。这样也不符合代码简洁的理念,于是就提出了函数模板的机制。函数模板可以用来创建一个通用的函数,以支持不同的参数类型,避免重载函数的函数体的重复代码。函数模板的关键是类型参数化。定义函数模板的格式是:

template <class 类型参数名1,class 类型参数名2...>
    模板函数的返回类型 模板函数名(参数表)
    {
        函数体
    }

看着麻烦,举个例子就简单了,还是比较大小,我们用函数模板实现:

#include <iostream>
using namespace std;
template <class T>
T max(T,T);
int main()
{
    cout<<"max(3,5)="<<max(3,5)<<endl;
    cout<<"max(5.3,1.5)="<<max(5.3,1.5)<<endl;
    return 0;
}
T max(T x,T y)
{
    return x>y?x:y;
}

第3行将类型定义成一个参数T,第4行是max函数的声明:接受T类型的两个参数,并返回T类型的值。第7行和第8行调用max函数,实参传递过来什么类型,形参x和形参y就是什么类型。