C ++模板并比较不同的类型

时间:2012-11-22 14:26:47

标签: c++ templates template-specialization

我正在尝试使用模板在C ++中编写泛型排序函数,但我仍然坚持编写greater函数,如果lhs > rhs

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

上面的代码将处理简单的类型,如int,long。我该怎么做才能使代码适用于std::stringstd::string&const char *。代码示例将是一个很好的帮助。

3 个答案:

答案 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字节的数字。对于字符串,使用字典顺序。

String comparison