#include <string.h> #include <stdio.h> template <typename T> T compare(const T &v1,const T &v2) { if(v1 < v2) return -1; if(v2 < v1) return 1; return 0; } int main(void) { int a = 5,b = 4; float x = 5.4 ,y = 6.4; printf("%d\n", compare(a,b)); printf("%f\n", compare(x,y)); return 0; }
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main pateo@pateo-B86N53X:~/work/study$ ./main 1 -1.000000 pateo@pateo-B86N53X:~/work/study$
#include <string.h> #include <stdio.h> template <typename T> T compare(const T &v1,const T &v2); int main(void) { int a = 5,b = 4; float x = 5.4 ,y = 6.4; printf("%d\n", compare(a,b)); printf("%f\n", compare(x,y)); return 0; } template <typename T> T compare(const T &v1,const T &v2) { if(v1 < v2) return -1; if(v2 < v1) return 1; return 0; }
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main pateo@pateo-B86N53X:~/work/study$ ./main 1 -1.000000 pateo@pateo-B86N53X:~/work/study$
#include <string.h> #include <stdio.h> template <typename T> T compare(const T &v1,const T &v2); int compare(const int v1,const int v2) { printf("compare method\n"); return v1 + v2; } int main(void) { int a = 5,b = 4; float x = 5.4 ,y = 6.4; printf("%d\n", compare(a,b)); printf("%f\n", compare(x,y)); return 0; } template <typename T> T compare(const T &v1,const T &v2) { printf("template compare method\n"); if(v1 < v2) { return -1; } if(v2 < v1) { return 1; } return 0; }
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main pateo@pateo-B86N53X:~/work/study$ ./main compare method 9 template compare method -1.000000 pateo@pateo-B86N53X:~/work/study$
结论:
普通函数和函数模板都完全匹配时,非模板版本优先
下面有关特化
#include <string.h> #include <iostream> using namespace std; template<class T> T compare(T t1, T t2) { return (t1<t2?t1:t2); } template<> const char* compare<>(const char* t1,const char* t2) { return(strcmp(t1,t2)<0) ?t1:t2; } int main(int argc, char* argv[]) { cout<<compare(5,2)<<endl; cout<<compare(0.2,0.5)<<endl; const char p[]="liaojianguo"; const char q[]="liao"; const char* r; r=compare(p,q); cout<<r<<endl; return 0; }
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main pateo@pateo-B86N53X:~/work/study$ ./main 2 0.2 liao pateo@pateo-B86N53X:~/work/study$