泛型设计(3)

<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

每个ArrayRC 类的实例化过程都会实例化相应的Array 类模板的实例,例如下面的定

ArrayRC<int> ia_rc( 10 );

引起Array 类和ArrayRC 类的一个int 实例被实例化,ia_rc 同上一节的非模板实例相同。

为了说明这一点,我们重写前面的程序来练习Array 和ArrayRC 类模板类型。首先,为了支

持语句

// 现在swap()必须也是一个模板

swap( ia1, 1, ia1.size() );

我们必须将swap()定义成一个函数模板,例如

#include "Array.h"

template <class elemType>

void swap( Array<elemType> &array, int i, int j )

{

elemType tmp = array[ i ];

array[ i ] = array[ j ];

array[ j ] = tmp;

}

每个swap()调用都会根据数组的类型产生适当的实例。下面是重新改写之后的main()函

数,它使用了Array 和ArrayRC 类模板

#include <iostream>

#include "Array.h"

#include "ArrayRC.h"

template <class elemType>

inline void

swap( Array<elemType> &array, int i, int j )

{

elemType tmp = array[ i ];

array[ i ] = array[ j ];

array[ j ] = tmp;

}

int main()

{

Array<int> ia1;

ArrayRC<int> ia2;

cout << "swap() with Array<int> ia1\n";

int size = ia1.size();

swap( ia1, 1, size );

cout << "swap() with ArrayRC<int> ia2\n";

size = ia2.size();

swap( ia2, 1, size );

return 0;

}

程序的输出结果与非模板的IntArray 类实现相同。

你可能感兴趣的:(C++,c,C#,J#)