模板类对象的比较器,C ++

时间:2010-12-31 10:20:36

标签: c++ templates comparator

让我们拥有一组模板对象所代表的新用户类型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();
        }
};

3 个答案:

答案 0 :(得分:1)

你可以这样或那样做,这是一个品味问题。

但是,在第二种情况下,您应该像这样使用它:

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

答案 1 :(得分:1)

我会将比较器移到TList类。 由于它没有状态,因此将其作为静态函数更简单:

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

答案 2 :(得分:0)

通常,您会使用模板化成员函数,因为每次要引用它时,写<T>的重点是什么?