1

テンプレートを使用して C++ で一般的な並べ替え関数を記述しようとしていますが、次greaterの場合に true を返す関数の記述に行き詰まっています。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 に答える