C++函数模板

C++函数模板

函数模板是用于生成函数的模板。在编译阶段,编译器会根据函数模板的使用情况创建出函数名相同,参数类型由编译器判断的若干函数。

通过函数模板创建的函数拥有相同的函数体,只是函数的参数类型不同。

函数模板的使用

每当在一个编译单元(经过预处理的.cpp文件)中使用了函数模板,则必须是在该编译单元中给出函数模板的定义。

因此,建议在头文件.h中对函数模板进行声明定义。

函数模板的声明:

template<typename T>
返回类型 函数名(参数列表);

其中T表示任意类型,参数的类型和返回类型都可以指定为T。

函数模板的定义:

template<typename T...>
返回类型 函数名(参数列表)
{
	//函数体
}

下面拿一个比较两个数是否相等的函数来举例子,传进来的参数可能是int、float。所以如果不使用函数模板,我们就要实现两个函数来实现这个功能:

#include <iostream>
using namespace std;

bool isEqual(int i, int j){
	return i == j;
}

bool isEqual(float i, float j){
	return i == j;
}

int main(){
	
	return 0;
}

下面就可以实现一个函数模板来简化这个函数,只需要使用函数模板实现一个函数就可以完成上面的功能。

#include <iostream>
using namespace std;

template<typename T>
bool isEqual(T i,T j){
	return i ==j;
}

int main(){
	return 0;
}
函数模板的特化

函数模板特化是指在实例化函数模板时,对特定类型的实参进行特殊的处理,即当实参为特定类型时,通过函数模板生成的函数会有不同的函数题。

特化时需要为函数模板添加新的定义,方式如下:

template<>
返回类型 函数名<特定的参数类型>(参数列表)
{
	//函数体
}

还是拿上面的判断两个数是否相等的函数为例子,这里的int和float数据确实可以使用连等号来判断是都相等,但是并不是所有的数据都可以使用 连等号来判断是都相等。 比如string类型的数据就不可以直接使用连等号来判断是否相等。因此下面特化一个专门用于处理string类型数据判断是否相等的函数。

#include <iostream>
using namespace std;

template<typename T>
bool isEqual(T i,T j){
	return i ==j;
}

template <>
bool isEqual<char*>(char* s1,char* s2)
{
	return strcmp(s1, s2) == 0;
}

int main(){
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值