一,实验内容
1. 模板函数(compare)
函数模板:是一种抽象函数定义,它代表一类同构函数
-
一般模板函数
-
特化模板函数
2. 模板类Queue或Stack
类模板:是一种更高层次的抽象的类定义。当函数模板需要对某些类型进行特化处理,称为函数模板的特化。当类模板内需要对某些类型进行特别处理时,使用类模板的特化。
- 模板类(Queue,Stack)
- 成员模板函数
- 模板特化:模板函数特化、模板成员函数特化、模板类特化
3. 模板类AutoPtr
- 构造函数
- 析构函数
- 拷贝构造函数
- 等号、->、*等运算符重载
- 主函数调用AutoPtr
二,实验过程
1.普通函数模板
template<typename T>
int compare(const T& left, const T& right) {
if (right < left) {
return 1;
}
if (left < right) {
return -1;
}
return 0;
}
compare<int>(1, 2); //使用模板函数
2.特化模板函数
template<>
void func(int i) {
cout << "In special version for int "<< i << endl;
}
int i = 10;
func(i);
3.成员模板函数
- 普通类和类模板的成员函数都可以是一个函数模板,
class Printer {
public:
template<typename T>
void print(const T& t) {
cout << t <<endl;
}
};
4. 模板类特化
类模板的特化:与函数模板类似,当类模板内需要对某些类型进行特别处理时,使用类模板的特化。例如:
这里归纳了针对一个模板参数的类模板特化的几种类型
一是特化为绝对类型;
二是特化为引用,指针类型;
三是特化为另外一个类模板。