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

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

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

您可以以一种或另一种方式做到这一点,这是一个品味问题。

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

typedef std::set <Object <T>, sortByVal<T> >   TObjects;
于 2010-12-31T10:23:26.820 回答
0

通常,您会使用模板化的成员函数,因为<T>每次您想要引用它时都编写它的意义何在?

于 2010-12-31T12:12:15.967 回答