C++ 中的纯比较函数
a pure comparison function in c++
我想创建一个通用的排序链表。因此,我有一个抽象类Data,带有纯运算符<(以便轻松对列表进行排序。我相信它被称为比较器。现在我有一个类 Job,它派生自 Data 并实现运算符。当我尝试创建工作列表并发现该工作也是抽象的时,问题就出现了。发生这种情况是因为我在 Job 中编写的运算符与 Data 中的签名不完全相同 -在数据中:
virtual bool operator<(const Data& other) const =0;
在工作中:
virtual bool operator<(const Job& other) const;
我必须在作业的操作员中接收作业,因为我无法将作业与通用数据进行比较。但是现在新的运算符只是隐藏旧的运算符,而不是覆盖它(或者实现它,因为它是纯粹的)。如何在不使用向下转换的情况下解决问题?谢谢!编辑:没有模板。
不使用向下转换...似乎是模板的工作。
您可以直接使用运算符强制实现比较函数,而不必将其声明为纯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 */ }
}
}
};
相关文章:
- C++自定义比较函数
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- 为什么 std::stable_sort() 的比较函数的参数必须是设置常量?
- 如何定义集合数组的比较函数?
- 根据比较函数C++对数组进行排序
- 使用自定义比较函数在类内进行列表排序
- 如何更改 std::set 的比较函数?
- 使用类似的比较函数时,在 c++ 中为 std:sort 获得不同的结果
- std::映射服装比较函数和函数/lambda错误
- 在C++排序中为比较函数指定参数
- 使用右值的比较函数
- 为什么比较函数类型需要指定为模板参数?
- 我应该将 lambda 或函子用于比较函数吗?
- 比较函数模板中的 VARTYPE 和 typeid().name / typename
- 如何键入定义一个专门的 std::set 模板,使用特定的比较函数实例化
- 无法在 std::sort 中使用 cdef 函数作为比较函数
- 关联容器,比较函数不是元素类型的一部分吗?
- 标准::lower_bound的比较函数
- 关于如何在 std::sort 和 std::p riority_queue 中使用自定义比较函数的困惑