//第二十三模板 12约束模板 //结束模板的大意,即是对模板的数据和方法有要求 /* template<class T> T max(T a, T b) { return (a>b)?a:b; } 假如比较的类型是两个指向字符串的指针,则比较运算符>比较的是两个地址而不是数值 char* max(char *a, char *b) { if(strcmp(a,b) > 0) return a; else return b; } 该函数具体化了max函数的两个参数和功能,该函数的两个参数是char*,它的功能是使用strcmp函数比较指针所指向的字符串 而不是指针,这个特定的用来替换函数模板的函数,我们把它叫做特定模板函数,或者是具体化模板实例 必须区分的几个术语, 函数模板是模板声明 模板函数是模板实例,也就是根据函数模板生成的函数 而特定模板函数,则是替换了函数模板的实例,也就是根据具体类型已经生成好了的函数 */ /*#include <iostream> #include <string> using namespace std; template<class T> T Imax(T a, T b) { return (a>b)?(a):(b); } char *Imax(char *a, char *b) { if(strcmp(a,b)>0){ return a; }else{ return b; } } int main() { int x=2, y=3; cout<<Imax(x,y)<<endl; //cout<<max(x,y)<<endl; //这里与C++类库中的max重载了,不合法 char*ch1 = "abc"; char*ch2 = "def"; cout<<Imax(ch1,ch2)<<endl; return 0; }*/