【C++函数模板:泛型编程利器】

函数模板

1.什么是函数模板

定义:不是一个具体的函数,而是一个通用工具,可以批量生成不同类型的函数

作用:一套代码,支持 int、double、char、类…… 所有类型,不用写重载!(意思就是支持不同数据类型的调用,解决代码重复问题)

泛型:是一种思想,让代码支持多种类型(类型参数化)

函数模板,类模板是C++实现泛型的两种方式

2.语法

template <typename/class 类型参数名>

返回值类型 函数名(参数列表)

{

函数体;

}

  • typename 定义泛型的关键字,T表示一种关键字(泛型的参数)

  • template:声明这是一个模板

  • T:通用类型占位符(可自定义名称,如 T、E、V 等)

  • typename关键字还有一个替身 class

//函数模板不要声明和定义分开
//因为函数模板不需要编译,只是调用时才进行实例化
template<typename T>
T add(T a,T b)
{
    return a+b;
}
​
//编译器自动根据实参类型生成对应函数
add(1, 2);        // T = int
add(1.1, 2.2);    // T = double
add('a', 'b');    // T = char
​
//也可以手动指定泛型类型
add<int>(1,3);
add<double>(2.2,4.5);

多泛型函数模板

  • <>内部可以定义多个泛型,使用“,”分隔

  • 如:<typename T,typename E,typename K>

  • 泛型名称可以任意:T1, T2, T3 / T, U, V 都可以

//函数模板不要声明和定义分开
template<class T1,class T2,class T3>//函数声明
T3 add(T1 a, T2 b) { return a + b; }//函数定义
​
int main()
{
     // 指定:T1=int, T2=short, T3=long
    cout << add<int, short, long>(1, 2) << endl;
    cout << add<short, int, char>(41, 7);
​
    return 0;
}

泛型 = 通用的数据类型(泛指类型)

3.函数模板的重载

函数模板的重载:调用时指定不同的泛型(具体化,实例化)

  • 函数模板可以构成重载

  • 依据:模板参数个数不同 / 函数参数不同

  • 调用时:编译器根据实参自动匹配 / 实例化最合适的模板

//一个模板
template<class T>
T add(T a, T b) { return a + b; }
//第二个模板
template<class T1,class T2,class T3>
T3 add(T1 a,T2 b){return a+b;}
//第三个模板,形参个数不同,也构成模板重载
template<class T>
T add(T a,T b, T c){return a+b+c;}
​
//函数模板也可以构成函数重载
//函数模板的重载:调用时指定不同的泛型(具体化,实例化)

以上三个同名 add,就是函数模板重载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值