模板问题?编译器问题?
我在看C++ Primer第四版第16.1节的时候,书上有个例子:
函数模板:
// implement strcmp-like generic compare function
// returns 0 if the values are equal, 1 if v1 is larger, -1 if v1 is smaller
template <typename T>
int compare(const T &v1, const T &v2)
{
if (v1 < v2) return -1;
if (v2 < v1) return 1;
return 0;
}
int main ()
{
// T is int;
// compiler instantiates int compare(const int&, const int&)
cout << compare(1, 0) << endl;
// T is string;
// compiler instantiates int compare(const string&, const string&)
string s1 = "hi", s2 = "world";
cout << compare(s1, s2) << endl;
return 0;
}
#include <iostream>
#include <string>
using namespace std;
template<class T>
int myCompare(const T &v1, const T &v2){
cout<<v1<<" "<<((v1>v2)?(">"):((v1<v2)?("<"):("=")))<<" "<<v2<<endl;
return (v1>v2)?(1):((v1<v2)?(-1):0);
};
int main(void){
int iRes;
cout<<"String 1 : "<<"A"<<endl;
cout<<"String 2 : "<<"a"<<endl;
iRes=myCompare("A", "a");
cout<<"A "<<((iRes==1)?(">"):((iRes==(-1))?("<"):("=")))<<" a"<<endl;
return 0;
};
cout<<"String 1 : "<<"A"<<endl;
cout<<"String 2 : "<<"a"<<endl;
cout<<typeid(T).name() <<endl;