2

次のようなテンプレートを使用した自己定義クラスがあります。

template<class T>
class foo 
{
    public:
    T a;
    bool operator<(const foo<T> &f);
    //other functions...
}

template<class T>
bool foo<T>::operator<(const foo<T> &f)
{return a - f.a;}

今、私はいくつかのfooを新しくし、それらに値を与えます、そして私はこの配列をソートしたいと思います:

foo<int>* fp = new foo<int>[3];
//give each element value
sort(fp, fp+3); //run-time error

ソート機能を使用すると、実行時エラーが発生しました。

私は何か間違ったことをしましたか?私を助けてください。

4

2 に答える 2

5

おそらくこのように:

template<class T>
bool foo<T>::operator<(const foo<T> &f)
{return a < f.a;}

std::sort比較関数(この場合は小なり演算子)が厳密な弱順序を定義する必要があります。A < Bとの両方B < Aが真である可能性があるため、実装はそうではありません。

于 2012-09-23T20:20:21.443 に答える
4

Tがboolにキャスト可能である場合、

template<class T>
bool foo<T>::operator<(const foo<T> &f)
{return a - f.a;}

== faを除いて、常にtrueを返します。次のようなものが必要な場合があります。

template<class T>
bool foo<T>::operator<(const foo<T> &f)
{return a < f.a;}

明らかに、less演算子がソート関数に対して正しくないため、ランタイムエラーが発生します。

于 2012-09-23T20:20:56.303 に答える