多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
如果代码实现时定义了赋值操作a=b,但是T为数组,这种假设就不成立了. 同样,如果里面的语句为判断语句`if(a>b)`,但是T如果是结构体,该假设也不成立,另外如果是传入的数组,数组名为地址,因此他比较的是地址,而这也不是我们说希望的操作 总之,编写的模板函数很可能无法处理某些类型,另一方面,有时候通用化是有意义的,但是c++语法不允许这样做.为了解决这样的问题,可以提高模板的重载,为这些特定的类型提供具体化的模板. **函数模板的具体化** ~~~ template<class T> void myfunc(T &a, T &b) { if (a > b) { cout << "a > b" << endl; } else { cout << "a <= b" << endl; } } class Maker { public: Maker(string name, int age) { this->name = name; this->age = age; } public: string name; int age; }; //不建议具体化函数模板,因为没有通用性 //具体化函数模板,注意上面的函数模板要有,才能具体化 template<> void myfunc<Maker>(Maker &a, Maker &b) { cout << "函数模板的具体化" << endl; if (a.age > b.age) { cout << "a>b" << endl; } else { cout << "a<=b" << endl; } } void test02() { Maker *m1 = new Maker("11", 11); Maker *m2 = new Maker("22", 22); myfunc(m1, m2); } ~~~