欢迎来到天天文库
浏览记录
ID:34449964
大小:339.57 KB
页数:11页
时间:2019-03-06
《泛型程序设计与stl(简体版)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、大局观:泛型程序设计(GenericProgramming)与STL侯捷jjhou@ccca.nctu.edu.twhttp://www.jjhou.com=>1.大局观:泛型程序设计与STL2.泛型指标(Iterators)与2000.02Traits技术3.泛型容器(Containers)的应用与实作4.泛型2000.03算法(GenericAlgorithms)与FunctionObjects5.各色2000.042000.05各样的Adaptors2000.06十年前赶上OO(ObjectOriented,面向对象)第一波工业浪潮的朋友们,想必今日有一番顾盼
2、豪情,以及一份「好加在」的惊悚:「好加在」搭上了OO的早班列车,不然今天就玩不下去了!面对GenericProgramming(泛型程序设计),我有相彷的感觉。我将撰写为期五次的系列文章,为各位介绍这个不算新却又有点新的观念与技术。●C++Template,Genericprogramming,STL1968DougMcIlroy发表其著名论文"MassProducedSoftwareComponents",揭橥了以「可重用软件组件(又称软件积木或软件IC)」构筑标准链接库的愿景。如今三分之一个世纪已逝,componentssoftware--以组件(组件)为本的软
3、件--大行其道。然而在许多领域中,标准化仍未建立。甚至连任何软件一定会用到的基本数据结构和基本算法,对此亦付阙如。于是大量的程序员,被迫进行大量重复的工作,为的竟只是重复完成前人早已完成而自己手上并未拥有的码。这不但是人力资源的浪费,也是挫折与错误的来源。撇开追求技术的热诚不谈(也许有人确实喜欢什么都自己来),商用链接库可以拯救这些程序员于水深火热之中。只要你的老板愿意花一点点钱,就可以在人力资源与软件开发效率上取得一个绝佳平衡。但是金钱并非万能,商用链接库彼此之间并无接口上的标准!换句话说你无法在发现了另一套更好、更丰富、效率更高的链接库后,改弦更张地弃此就彼--
4、那可能会使你付出惨烈的代价。这或许是封闭型技术与观念带给软件组件公司的一种小小的、短暂的利益保护。除了「接口无标准」这一问题,另一个问题是,目前绝大部份软件组件都使用面向对象技术,大量运用继承与虚拟函式,导致执行成本增加。此外,一旦运用面向对象技术,我们此刻所说的基础数据结构及各种基础算法,便皆需以container(容器,放置数据的某种特殊结构)为本。资料,放在containerclasses内(形成其datamembers);操作行为,亦定义在containerclasses内(形成其memberfunctions);这使得耦合(coupling,两物过度相依而
5、不独立)的情况依然存在,妨碍了组件之所以为组件的独立性、弹性、互操作性(相互合作性,interoperability)。换句话说,要解决这些困境,第一需要标准接口的建立,第二需要OO以外的新技术,俾能够比OO更高效率地完成工作。C++template是新技术的曙光。一言以蔽之,所谓template机制就是,将目标物的数据型别参数化。一旦程序以指定自变量的方式,确定了这个(或这些)型别,编译程序便自动针对这个(或这些)型别产生出一份实体。这里所说的实体,可以是一个functionbody,也可以是一个classbody。而「由编译程序产生出一份实体」的动作,我们称之为
6、具现化(instantiation)。针对目标物之不同,C++支持functiontemplates和classtemplates两大类型。后者的members又可以是templates(所谓membertemplates),形成深一file:///C
7、/Users/Boy/Desktop/泛型程序设计与STL.html[2013/1/171:07:20]度巢状(nested),带来极大的弹性与组合空间。关于这点,本文稍后示范STL的使用时,会展现在你面前。下面是一个简单的functiontemplate:#includeusingnamespa
8、cestd;templateTypemymin(Typea,Typeb){returna
此文档下载收益归作者所有