Немного расширю ответ MiiNiPaa.
Добавить поддержку шаблонных компараторов можно таким образом:
template< typename item_t, template< typename > class item_traits >
class item_processor{
private:
typedef item_traits<item_t> traits_t;
...
};
Изюмина во втором параметре шаблона - это шаблонный параметр шаблона. :)
У Девида Вандервуда по этому поводу было даже так написано: "Поскольку параметр шаблонного параметра шаблона не используется, его имя можно опустить".
Такая запись говорит о том, что при инстанцировании или специализации шаблона в его объявлении ожидается только имя шаблона, а не его инстанцирование.
Используется это дело вот так:
template< typename target_t >
class traits_less;
...
item_processor<char, traits_less> char_processor;
Все компараторы STL имеют один параметр шаблона. Таким образом, их использование тоже становится допустимо в качестве параметра для item_processor. В то же время, и свой компаратор в такую систему добавить проблемы не составит.