Предположим, у меня есть шаблонный класс LinkedList, который также содержит метод Sort
Я хочу иметь возможность иметь компаратор по умолчанию, который предполагает, что тип T можно сравнить с оператором <. </p>
Однако я хочу иметь возможность переопределить это для других типов.
Это часть пользовательской библиотеки, которую я расширяю. Нет STL.
, например
template <class T, class Comparator<T> >
class LinkedList
{
...
Node* MergeSort(Node* list)
{
...
if (Comparator<T>(nodeA,nodeB))
...
}
...
};
typedef Pair<int, int> ListEntry;
struct sorter
{
inline sorter(){}
inline bool operator()(ListEntry const& a, ListEntry const& b)
{
return a.second < b.second;
}
};
Pair<int, int> entry;
LinkedList<ListEntry, sorter()> list;
list.PushFront( ListEntry(5,9) );
list.PushFront( ListEntry(77,5) );
list.PushFront( ListEntry(4,1) );
list.PushFront( ListEntry(8,44) );
list.PushFront( ListEntry(1,64) );
list.PushFront( ListEntry(3,5) );
n = list.MergeSort(node* n);
Примерно так выглядит мой класс. На самом деле MergeSort является частным участником данных, но я временно обнародовал его, пока я дурачусь и пытаюсь заставить его работать. MergeSort будет в конечном итоге вызван Sort.
Я не смог скомпилировать это. Просто интересно, как бы вы обычно передавали объекты Functor таким образом.