<b>C++中的模板(template)</b>[VC/C++编程]
本文“<b>C++中的模板(template)</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
网上我最喜好的技术文章是近似某何君所著“CVS快速入门”大概“UML reference card”之类,简短扼要,可以非常快的领着你进入一个新天地.而关于对比长的文章我普通是将其保存到硬盘上,然后预备着“今后有时间”的时刻再看,但它们普通的命运都是“闲坐说玄宗”,直到某一天在整理硬盘时将它们以“不知所云”入罪,一并删除.
这篇小文主如果针对方才接触模板概念的读者,但愿能帮忙读者学习模板的利用.为了避免本文也在诸公的硬盘上遭逢恶运,我决意写的短些.“今后有时间”的时刻再增补些内容.
1. 简介
模板是C++在90年代引进的一个新概念,本来是为了对容器类(container classes)的支持[1],但是目前模板产生的效果已经远非当初所能想象.
简单的讲,模板就是一种参数化(parameterized)的类或函数,也就是类的形状(成员、办法、筹划等)大概函数的形状(参数、返回值等)可以被参数改变.越发奇异的是这里所说的参数,不光是我们传统函数中所说的数值情势的参数,还可以是一种范例(实际上略微有一些理解的人,更多的会注意到利用范例作为参数,而常常忽视利用数值作为参数的情形).
举个常用的例子来注释大概模板就从你脑袋里的一个模糊的概念变成活生生的代码了:
在C语言中,假如我们要对比两个数的大小,常常会定义两个宏:
#define min(a,b) ((a)>(b)?(b):(a))
#define max(a,b) ((a)>(b)?(a):(b))
这样你便可以在代码中:
return min(10, 4);
大概:
return min(5.3, 18.6);
这两个宏非常好用,但是在C++中,它们并不像在C中那样受欢送.宏因为没有范例查抄以及天生的不安全(比方假如代码写为min(a++, b--);则明显后果非你所愿),在C++中被inline函数替换.但是随着你将min/max改成函数,你立即就会发现这个函数的范围性 —— 它不能处理你指定的范例以外的别的范例.比方你的min()声明为:
int min(int a, int b);
则它明显不能处理float范例的参数,但是本来的宏却可以很好的工作!你随后大约会想到函数重载,通太重载差别范例的min()函数,你仍旧可以使大部份代码正常工作.实际上,C++关于这类可以抽象的算法,供应了更好的办法,就是模板:
template <class T> const T & min(const T & t1, const T & t2) {
return t1>t2?t2:t1;
}
这是一个模板函数的例子.在有了模板之后,你就又安闲了,可以像本来在C语言中利用你的min宏一样来利用这个模板,比方:
return min(10,4);
也可以:
return min(5.3, 18.6)
你发现了么?你得到了一个范例安全的、而又可以支持肆意范例的min函数,它能否比min宏好呢?
当然上面这个例子只触及了模板的一个方面,模板的作用远不只是用来替换宏.实际上,模板是泛化编程(Generic Programming)的底子.所谓的泛化编程,就是对抽象的算法的编程,泛化是指可以遍及的实用于差别的数据范例.比方我们上面提到的min算法.
以上是“<b>C++中的模板(template)</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |