// 泛型模板
template <typename Type>
int compare(const Type& l, const Type& r)
{
if( l>r ) return 1;
else if( r>l ) return -1;
return 0;
}
//-----------------------------------------------------------------------------------
// template<> int compare<const char*>(const char* const &lc, const char* const &rc)
// 如果换成 (const char *&lc, const char* &rc)则会发生编译错误,因为是指针的引用
// 且不能改变实参的值,改变之后lc, rc本身是引用而函数意思是不能改变实参的值,发生矛盾
// 所以引起编译错误,加上const 之后指针则不会发生改变
//-----------------------------------------------------------------------------------
template <>
int compare<const char*>(const char* const &lc, const char* const &rc)
{
return strcmp(lc, rc);
}
验证:
如果把compare<const char*> 改为compare<char*>发生错误
如果把template<> int compare<const char*>(const char* const &lc, const char* const &rc)改为t
template<> int compare<char*>(const char* &lc, const char* &rc)依然错误
如果改为template<> int compare<char*>(char* &lc, char* &rc),并把template<typename Type> int compare(const Type&, const Type&)
改为template<typename Type> int compare(Type&, Type&)就编译成功。