c ++中的纯比较函数

时间:2012-05-31 19:31:54

标签: c++

我想创建一个通用的有序链表。因此,我有一个抽象类Data,带有一个纯运算符< (为了便于对列表进行排序。我相信它被称为comperator。)现在我有一个类Job,它派生自Data并实现运算符。当我尝试创建一份工作清单并发现工作也是抽象的时,问题就出现了。之所以发生这种情况,是因为我在Job中编写的运算符与数据中没有完全相同的签名 - 在数据中:

virtual bool operator<(const Data& other) const =0;

并且在工作中:

virtual bool operator<(const Job& other) const;

我不得不接受工作经营者的工作,因为我无法将工作与一般数据进行比较。但是现在新的运算符只是隐藏旧的运算符而不是覆盖它(或者实现它,因为它是纯粹的)。 如何在不使用向下转换的情况下解决问题? 谢谢! 编辑:没有模板。

1 个答案:

答案 0 :(得分:3)

不使用向下转换......似乎是模板的工作。

您可以直接使用运算符强制执行比较函数,而不必将其声明为纯virtual。它也是通用的。

结果相同,方法不同。更灵活,因为您不必从某些东西派生(如果您开始使用多重继承, 会变得很痛苦。)

template<typename T>
class SortedLinkedList
{
    T* head;
    void insertItem(const T& item)
    {
       T* currentNode = head;
       //iterate
       {
          if ( *currentNode < item ) // force implementation of operator <
          { /* whatever */ }
       }
    }
};