模板的局限性
模板的局限性
局限性:
-
模板的通用性并不是萬能的
在上述代碼中提供的賦值操作,如果傳入的a和b是一個數組,就無法實現了
在上述代碼中,如果T的數據類型傳入的是像Person這樣的自定義數據類型,也無法正常運行
因此C++為了解決這種問題,提供模板的重載,可以為這些特定的類型提供具體化的模板
#include <iostream> using namespace std;#include <string>class Person { public:Person(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age; };//普通函數模板 template<class T> bool myCompare(T& a, T& b) {if (a == b){return true;}else{return false;} } //具體化,顯示具體化的原型和定意思以template<>開頭,并通過名稱來指出類型 //具體化優先于常規模板 template<> bool myCompare(Person &p1, Person &p2) {if ( p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age){return true;}else{return false;} }void test01() {int a = 10;int b = 20;//內置數據類型可以直接使用通用的函數模板bool ret = myCompare(a, b);if (ret){cout << "a == b " << endl;}else{cout << "a != b " << endl;} }void test02() {Person p1("Tom", 10);Person p2("Tom", 10);//自定義數據類型,不會調用普通的函數模板//可以創建具體化的Person數據類型的模板,用于特殊處理這個類型bool ret = myCompare(p1, p2);if (ret){cout << "p1 == p2 " << endl;}else{cout << "p1 != p2 " << endl;} }int main() {test01();test02();system("pause");return 0; }
總結:
-
利用具體化的模板,可以解決自定義類型的通用化
-
學習模板并不是為了寫模板,而是在STL能夠運用系統提供的模板
總結
- 上一篇: 普通函数与函数模板的区别
- 下一篇: 取 1~100之间的随机整数