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