2010-12-31 14 views
2

は、私たちは、テンプレートオブジェクトの集合によって表される新しいユーザータイプTLISTてみましょう:コンパレータ、C++

template <class T> 
struct TList 
{ 
    typedef std::set <Object <T>, sortByVal > TObjects;  
}; 

は、コンパレータsortByValまた、テンプレートクラスでなければなりませんか、それは十分なテンプレートメソッドです非テンプレートクラス?

class sortByVal 
{ 
    public: 
     template <class T> 
     bool operator() (const Object <T> &o1, const Object <T> &o2) const 
     { 
      return o1.getVal() < o2.getVal(); 
     } 
}; 

または

template <class T> 
class sortByVal 
{ 
    public: 
     bool operator() (const Object <T> &o1, const Object <T> &o2) const 
     { 
      return o1.getVal() < o2.getVal(); 
     } 
}; 
+0

これはクラスが作成されるテンプレートなので、_classテンプレートと呼ばれています。 – sbi

答えて

1

あなたはそれを一つの方法または他の操作を行うことができ、それは好みの問題です。私はTListのクラスにコンパレータを移動する

typedef std::set <Object <T>, sortByVal<T> > TObjects; 
1

しかし、後者の場合には、あなたはこのようにそれを使用する必要があります。 そして、それは何の状態を持っていないので、それはそれ静的関数にするために簡単です:書き込み<T>のポイントは、あなたがそれを参照するたびに何だから

template<typename T> 
struct TList 
{ 
    static bool Compare(const TObject<T> &o1,const TObject<T> &o2); 
... 
0

通常、あなたは、テンプレートメンバ関数を使うのでしょうか?

関連する問題