目录
1.特化原因
模板可以实现与数据类型无关的代码,但对于一些特殊的类型,可能会得到错误的结果,这个时候就需要进行特化处理。
举个栗子:
template<class T> bool Less(T left, T right) { return left < right; } int main() { cout << Less(1, 2) << endl; // 可以比较,结果正确 Date d1(2022, 7, 7); Date d2(2022, 7, 8); cout << Less(d1, d2) << endl; // 可以比较,结果正确 Date* p1 = &d1; Date* p2 = &d2; cout << Less(p1, p2) << endl; // 可以比较,结果错误 return 0; }
特化定义:在原模板类的基础上,针对特殊类型所进行特殊化的实现方式。模板特 化中分为函数模板特化与类模板特化
2.类特化
全特化
全特化即是将模板参数列表中所有的参数都确定化。
偏特化
偏特化即是将模板参数列表中部分参数确定化。同样是上面全特化的模板
3.函数特化
函数模板特化步骤
1. 必须要先有一个基础的函数模板
2. 关键字template后面接一对空的尖括号<>
3. 函数名后跟一对尖括号,尖括号中指定需要特化的类型
4. 函数形参表: 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇怪的错误