每个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 类实现相同。