C++函数模板总结:
//C++提高编程 模板(泛型编程 STL)
//模板不可以直接使用 它只是一个框架
//模板的通用并不是万能的
//语法
//template<typename T>
//函数模板两种方式
//1.自动类型推导 必须推导出一致的数据类型T,才可以使用
//2.显示指定类型 模板必须确定出T的数据类型,才可以使用
//普通函数与函数模板的区别:
//普通函数调用时可以发生自动类型转换(隐式类型转换)
//函数模板调用时 如果利用自动类型推导,不会发生隐式类型转换
//如果利用显示指定类型的方式 可以发生隐式类型转换
//普通函数与函数模板的调用规则:
//1.如果函数模板与普通函数都可以实现,优先调用普通函数
//2.可以通过空模板参数列表来强制掉用函数模板
//3.函数模板也可以发生重载
//4.如果函数模板可以产生更好的匹配 优先调用函数模板
//5.普通函数 模板函数最好不要同时出现 可能会出现二议性
//模板的局限性
//模板的通用性并不是万能的,有些特定数据类型,需要用具体化方式做特殊实现
//利用具体化的模板,可以解决自定义类型的通过化
//学习模板并不是为了写模板,而是在STL能够运用系统提供的模板
1 //模板的局限性 2 //模板的通用性并不是万能的,有些特定数据类型,需要用具体化方式做特殊实现 3 //利用具体化的模板,可以解决自定义类型的通过化 4 //学习模板并不是为了写模板,而是在STL能够运用系统提供的模板 5 6 #include <iostream> 7 #include <string> 8 #include<fstream> 9 using namespace std; 10 11 class Person 12 { 13 public: 14 Person(string name, int age) 15 { 16 this->m_Name = name; 17 this->m_AGe = age; 18 } 19 //姓名 20 string m_Name; 21 22 //年龄 23 int m_AGe; 24 25 26 }; 27 28 29 30 31 //对比两个数据是否相等 32 template<typename T> 33 bool myCompare(T& a, T& b) 34 { 35 if (a == b) 36 { 37 return true; 38 } 39 else 40 { 41 return false; 42 } 43 } 44 45 //利用具体化Person的版本来实现代码,具体化优先调用 46 template<> bool myCompare(Person& p1, Person& p2) 47 { 48 if (p1.m_Name == p2.m_Name && p1.m_AGe == p2.m_AGe) 49 { 50 return true; 51 } 52 else 53 { 54 return false; 55 } 56 } 57 58 void test01() 59 { 60 int a = 10; 61 int b = 20; 62 63 bool ret = myCompare(a, b); 64 65 if (ret) 66 { 67 cout << "a==b" << endl; 68 } 69 else 70 { 71 cout << "a != b" << endl; 72 } 73 } 74 75 void test02() 76 { 77 Person p1("Tom", 10); 78 Person p2("Tom", 110); 79 80 bool ret = myCompare(p1, p2); 81 if (ret) 82 { 83 cout << "p1==p2" << endl; 84 85 } 86 else 87 { 88 cout << "p1 !=p2" << endl; 89 } 90 } 91 int main() 92 { 93 94 // test01(); 95 test02(); 96 97 system("pause"); 98 99 return 0; 100 101 }
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15131219.html