模板和泛型编程也是C++中很重要的一部分,相信很大一部分程序员都用过某种容器类。但一般来说也就是用用而已,并不会自己构建类模板或者在建模中使用类模板。

本文介绍EA中类模板的创建类模板和使用类模板的方法。

创建类模板

假设我们要创建一个映射类(假设而已,可别真去创建)MyMap,它有两个参数,一个是Key,一个是元素T。

首先创建一个普通的类,设定类名为MyMap。



EA&UML日拱一卒-类模板_类图



一定有人在输入类名的时候直接输入MyMap<class Key, class T>,这时候生成的类图就像下面这样。


EA&UML日拱一卒-类模板_类图_02

看起来也是那么回事,但是并不能生成正确的代码。所以还是回到原先的轨道上来吧。只要输入MyMap就好。


接下来选择【Templates】分类,并在【Template Parameter(s)】列表空间中增加Key和T两个参数,Type都指定为class。


EA&UML日拱一卒-类模板_类图_03

按下【确定】按钮返回后,类图会变成下面这样。


EA&UML日拱一卒-类模板_类模板_04

生成的代码如下:


EA&UML日拱一卒-类模板_EA_05

使用类模板

作为例子接下来利用MayMap实例化一个类名为PersonMap的类,负责管理从整数到Person*的映射。

首先创建一个普通的类,名为PersonMap。


EA&UML日拱一卒-类模板_UML_06

从工具栏的【Class Relationsships】组里选择下面图标。


EA&UML日拱一卒-类模板_EA_07

然后从PersonMap类向MyMap类拖动鼠标,以建立两个类的连接关系。


EA&UML日拱一卒-类模板_类图_08

鼠标双击《bind》连接线打开属性对话框并选择【Binding】分类,然后按下【Add】按钮在【Parameter Substitution(s)】列表中添加参数。


EA&UML日拱一卒-类模板_类模板_09

如上图所示,Formal列可以选择Key和T参数。它们都是在MyMap类模板中定义的。继续操作,指定Key和T参数的内容。

类图会变成下面这样。请关注红圈中的变化。


EA&UML日拱一卒-类模板_面向对象_10

对应代码如下。


EA&UML日拱一卒-类模板_UML_11

生成的有效代码很少,但这确实是正确的代码。在UML中这种方式叫显示绑定。

在UML中还有一种不指定新类型名的隐式绑定,可是很遗憾,作者并没有在EA中找到合适的表达方法。如果正在阅读本文的你知道怎么做,还请不吝赐教。


如果阅读本文能给您带来些许收获,欢迎分享给更多的朋友!

阅读更多新文章,请扫描下面二维码,关注公众号【面向对象思考】


EA&UML日拱一卒-类模板_类图_12