2

テンプレート オブジェクトのセットで表される新しいユーザー タイプ Tlist を作成します。

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();
        }
};
4

3 に答える 3

1

どちらの方法でも構いませんが、好みの問題です。

ただし、2 番目のケースでは、次のように使用する必要があります。

typedef std::set <Object <T>, sortByVal<T> >   TObjects;
于 2010-12-31T10:23:26.820 に答える
1

コンパレータを TList クラスに移動します。また、状態がないため、静的関数にする方が簡単です。

template<typename T>
struct TList
{
    static bool Compare(const TObject<T> &o1,const TObject<T> &o2);
...
于 2010-12-31T11:54:01.943 に答える
0

<T>通常は、テンプレート化されたメンバー関数を使用します。これを参照するたびに記述する必要があるからです。

于 2010-12-31T12:12:15.967 に答える