【问题标题】:Comparator for template class objects, C++模板类对象的比较器,C++
【发布时间】:2010-12-31 10:20:36
【问题描述】:

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

【问题讨论】:

  • 它被称为类模板,因为它是创建类的模板,而不是相反。

标签: c++ templates comparator


【解决方案1】:

你可以用一种或另一种方式来做,这是一个品味问题。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      通常,您会使用模板化成员函数,因为每次要引用它时都写&lt;T&gt; 有什么意义?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多