本文主要是介绍C++ 65 之 模版的局限性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include <iostream>
#include <cstring>
using namespace std;class Students05{
public:string m_name;int m_age;Students05(string name, int age){this->m_name = name;this->m_name = age;}
};// 两个值进行对比的函数
template<typename T>
bool myCom(T& a, T& b){if (a == b){return true;}else{return false;}
}
// 重载 == 也可以实现,不过这里采用特殊模板
// 利用具体化,实现对于自定义的类型进行对比 需要提供特殊模板
template<> bool myCom(Students05& a, Students05& b){if(a.m_name == b.m_name && a.m_age == b.m_age){return true;}else{return false;}
}int main()
{// int a = 1;// int b = 2;// bool res = myCom(a,b);// if(res){// cout << "a==b" << endl;// }// else{// cout << "a!=b" << endl;// }Students05 stu1("张三",18);Students05 stu2("李四",20);bool res = myCom(stu1,stu2);if(res){cout << "a==b"<< endl;}else{cout << "a!=b"<< endl;}return 0;
}
模板的局限性
假设有如下模板函数:
template<class T>
void f(T a, T b)
{ … }
如果代码实现时定义了赋值操作 a = b,但是T为数组,这种假设就不成立了
同样,如果里面的语句为判断语句 if(a>b),但T如果是结构体,该假设也不成立,另外如果是传入的数组,数组名为地址,因此它比较的是地址,而这也不是我们所希望的操作。
总之,编写的模板函数很可能无法处理某些类型,另一方面,有时候通用化是有意义的,但C++语法不允许这样做。为了解决这种问题,可以提供模板的重载,为这些特定的类型提供具体化的模板。
这篇关于C++ 65 之 模版的局限性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!