C++ 模板函数

C++模板的使用可以提升代码的通用性、可移植性。方便通用库的开发。
与模板有关的关键字有两个:
template 定义模板所用到的关键字。
typename 类型的名字,比如int,double,可以使用类类型,struck类型等。也可以使用class关键字来代替typename,但是推荐使用template。

模板函数的形式如下,一个可以比较大小的函数模板

#include <iostream>

template <typename T>
T max(T a, T b)
{
    return a > b ? a : b;
}

int main()
{
    std::cout << max(3, 5) << std::endl;
    return 0;
}

代码很好理解:

声明一个模板max,模板使用的未知类型只有一种使用T来代替;
函数的返回值与输入参数的类型相同;
T max(T a, T b) 说明a,b 以及函数的返回值类型相同;

在main 函数内对模板进行了调用
max(3,5); //返回值为5;
相当于调用了如下函数,编译器从函数调用传入实参分别为数值3 5,即整形(int)

int max(int a, int b)
{
    return a > b ? a : b;
}

上面调用使的是编译器自动判定T的类型,我们也可以指定T的类型

max<double>(3.5, 5)//返回值为5.0  double类型

//相当于调用了如下函数
double max(double a, double b)
{
    return a > b ? a : b;
}

当在程序中使用模板函数或者模板类时,编译器会生成多个版本的“同名函数”或者“同名类”。如上文会生成一个int 版本的一个double的版本,有点和同名不同类型参数的重载函数相似,但只需要书写一边。甚至类型也可以是类 类型,当然必须要重载 > ;

template <typename T>
T max(T a, T b)
{
    return a > b ? a : b;
}
class Data
{
public:
    Data(double i) :a(i)
    {    }
    bool operator >(Data& data)//重载 > 使max函数可以进行计算比较两个Data类型的大小。
    {
        return this->a > data.a ? true : false;
    }
    double a;
};
int main()
{
    Data data1(3), data2(5);
    Data data = max<Data>(data1, data2);
    std::cout << data.a << std::endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值