Listing 7

// ...
template<class INPUT_TYPE>
class DefaultClassifier { 
public: 
  typedef INPUT_TYPE return_type;
  objtype operator(const INPUT_TYPE & i) const { return i; }
};
template<typename INPUT_TYPE, 
typename CLASSIFIER_TYPE = DefaultClassifier<INPUT_TYPE> >
class ProcessorMgr
{
 ...
  void processInput(const INPUT_TYPE & i)
  { 
    CLASSIFIER_TYPE::return_type c = 
      CLASSIFIER_TYPE().operator()(i);
    PMap::iterator p = my_processors.find(c);
    (p->second)(p->first, i);
  }; 
};
 ...