2012-11-22 74 views
1

我試圖用C++使用模板通用的排序功能,但我卡在寫greater功能,如果lhs > rhsC++模板和比較不同類型

template <typename T> 
bool Sorter<T>::greater(T lhs, T rhs) 
{ 
    return lhs > rhs; 
} 

上面的代碼會照顧返回true簡單類型如int,long。我該怎麼做才能使代碼適用於std::string,std::string&,const char *。代碼示例將非常有幫助。

+2

首先,返回lhs> rhs'。 – avakar

+0

所有處理'>'-operator。你如何管理'std :: string','std :: string&',const char *'進行字典對比? – triclosan

+0

快速提示:您可以簡單地使用「return(lhs> rhs);」。 – Gaminic

回答

7

我說你不得不擔心的只有一個大概是const char*std::string應該已經有operator>某處定義...(通常在<string>

對於const char*,提供專業化..如。

template <> 
bool Sorter<const char*>::greater(const char* lhs, const char* rhs) 
{ 
    return std::strcmp(lhs, hs) > 0; 
} 
4

您必須針對類型進行專門化,該類型的比較並非像lgs>rhs那樣直截了當。

下面是我重新編寫代碼:

template <typename T> 
bool greater(T const& lhs, T const& rhs) 
{ 
    return lhs > rhs; 
} 

,這裏是你如何擅長的:爲簡單起見

template<> 
bool greater<string>(string const& lhs, string const& rhs) 
{ 
    // 
}  

成員刪除。

請注意,已有一個std::greater

0

所有這些類型都帶有比較運算符。請記住,字符只是一個1字節的數字。對於字符串,使用字典順序。

String comparison