我正在尝试使用模板在C ++中编写泛型排序函数,但我仍然坚持编写greater
函数,如果lhs > rhs
template <typename T>
bool Sorter<T>::greater(T lhs, T rhs)
{
return lhs > rhs;
}
上面的代码将处理简单的类型,如int,long。我该怎么做才能使代码适用于std::string
,std::string&
,const char *
。代码示例将是一个很好的帮助。
答案 0 :(得分: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;
}
答案 1 :(得分: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
。
答案 2 :(得分:0)
所有这些类型都带有比较运算符。请记住,char只是一个1字节的数字。对于字符串,使用字典顺序。