函数的模板

首先了解什么是模板:

在C语言中如果我们想实现一个函数供客户使用,需要考虑到各种情况,拿一个两数相加的函数来说,我们就不能为其指定数据类型,所以我们通常有以下几种实现方法:

1,利用C语言中的泛型,即void*来实现。

2,利用函数重载来实现。

3,利用宏函数来实现。

在c++中,我们可以通过模板来实现。

例如:

template<typename T>
T Sum(T a,T b)
{
    return a + b;
}
int main()
{
    Sum<int>(10,20);
} 

main函数上面的部分就叫做函数模板。

模板都是在编译阶段处理的,利用typedef重定义了类型,而不是用宏替换,这样可以避免#define的一些不足之处,例如没有语法检查以及不安全等缺点。

模板的编译分两步:

1,在函数模板的定义点编译模板的头部。

2,在函数的调用点编译模板的实例化版本(模板函数)。

main函数里面对模板进行了实例化,给出了模板类型T-->int。函数模板可以所给出的实参推演出函数模板的类型。

3,函数模板实参推演的注意事项:

1)不能让编译器产生二义性

2)必须有推演依据(即有实参)

4,函数模板的特例化:和函数模板的修饰要一致

template<>
void Show<char*>(char* a, char* b)
{
	std::cout << "template<>" << std::endl;
	std::cout << a << std::endl;
	std::cout << b << std::endl;
}

5,模板的重载的三种形式(优先级从上到下):

1)普通函数版本

2)模板的特例化版本

3)模板的版本

6,模板的类型参数

7,模板的非类型参数

1)常量

2)不能是float double

8,接受一个不明确类型

9,函数模板的默认值  c++11支持   c++98类模板支持默认值  函数模板不支持默认值

template<typename T, typename E, typename R = long>
R Mul(T a, E b)
{
	R rt = R();
	rt = a*b;
	return rt;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值