模版

来源:互联网 发布:淘宝网推广方法ppt 编辑:程序博客网 时间:2024/04/16 23:51

                                    

一、模版概念的引入

我们都知道,一个事物的产生与存在一定有自己的独特的作用,任何东西都不会无缘无故的出现,如果一个事物的功能能完全被另一个事物代替,那么它也就没有必要出现了,今天我们要一起讨论的是模版,那么我们就先来看看在C++中引入模版的原因。

在以前的学习中,实现一个加法函数是再简单不过的事了,但是如何事先一个通用的加法函数呢?

方法一:通过函数重载,根据每个所需相同行为的不同类型重新实现。

int类型数据的加法:

Int Add(const int &_Left,const int &Rigth)

{

    Return _Left+_Right;

}

float类型数据的加法:

float Add(const float &_Left,const float &Rigth)

{

    Return _Left+_Right;

}

【缺点】

1、只要有新类型出现,就要重新添加对应函数。

2、除类型外,所有函数的函数体都相同,代码的复用率不高

3、如果函数只是返回值类型不同,函数重载不能解决

4、一个方法有问题,所有的方法都有问题,不好维护。

方法二:使用公共基类,将通用的代码放在公共的基础类里面

【缺点】

1、借助公共基类来编写通用代码,将失去类型检查的优点;

2、对于以后实现的许多类,都必须继承自某个特定的基类,代码维护更加困难。

方法三:使用特殊的预处理程序

#define ADD(a, b) ((a) + (b))

【缺点】

不是函数,不进行参数类型检测,安全性不高。

    以上各种方法都有自己的缺陷,因此,C++中引入了泛型编程的概念。

泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段,模版是泛型编程的基础。

 

二、函数模版

函数模版:代表了一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

函数模版的格式:


 

typename是用来定义模板参数关键字,也可以使用class。建议尽量使用typename

注意:不能使用struct代替typename

模板函数也可以定义为inline函数

template<typename T>

inline T Add(const T _left, const T _right)

{

return (_left + _right);

}

注意:inline关键字必须放在模板形参表之后,返回值之前,不能放在template之前

 

原创粉丝点击