Это задача для мастеров шаблонов / шаблонов проектирования C #.
Я пытаюсь реализовать общую кучу, а затем очередь приоритетов, которая использует кучу.
Моя кучаподпись:
class Heap<TKey, TValue> where TKey : IComparable<TKey>
Мой класс очереди приоритетов:
public delegate IComparable<T> Evaluator<T>(T item);
class PriorityQueue<T> : IQueue<T>
{
Evaluator<T> Evaluate;
Heap<IComparable<T>, T> m_heap;
public PriorityQueue(Evaluator<T> evaluateFunction)
{
Evaluate = evaluateFunction;
m_heap = new Heap<int, T>(HeapType.MinHeap);
}
...
public void Insert(T element)
{
m_heap.Insert(Evaluate(element), element);
}
...
Но при этом компилятор (оправданно) жалуется, что ICompareble не реализует интерфейс ICompareble, следовательно
Heap<IComparable<T>, T> m_heap;
конфликтует с
where TKey : IComparable<TKey>
Что вы можете сделать, чтобы решить эту проблему?!
полная ошибка компилятора:
The type 'System.IComparable<T>' cannot be used as type parameter 'TKey' in the generic type or method 'Heap<TKey,TValue>'. There is no implicit reference conversion from 'System.IComparable<T>' to 'System.IComparable<System.IComparable<T>>'.