1

我正在尝试使用模板在 C++ 中编写一个通用排序函数,但我坚持编写greater返回 true if 的函数lhs > rhs

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

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

4

3 回答 3

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;
}
于 2012-11-22T14:31:50.830 回答
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.

于 2012-11-22T14:32:15.710 回答
0

所有这些类型都带有比较运算符。请记住,char 只是一个 1 字节的数字。对于字符串,使用字典顺序。

字符串比较

于 2012-11-22T14:32:46.317 回答