Listing 6
// ...
template<typename CLASSIFIER_TYPE>
class ProcessorMgr
{
...
typedef std::map<CLASSIFIER_TYPE::return_type,
ProcessorInfo> PMap;
...
void processInput(InputObj i)
{
CLASSIFIER_TYPE::return_type c = CLASSIFIER_TYPE().operator()(i);
PMap::iterator p = my_processors.find(c);
(p->second)(p->first, i);
};
};
...
enum objtype { foo, bar };
class input_classifier {
public:
typedef objtype return_type;
objtype operator(const InputObj & i) const
{ return i.getType(); }
};
int main()
{
ProcessorMgr<input_classifier> mgr;
mgr.addProcessor(foo, new FooProcessor());
mgr.addProcessor(bar, new BarProcessor());
InputObj x1, x2;
mgr.processInput(x1);
mgr.processInput(x2);
return 0;
}