Listing 2
class ProcessorMgr
{
private:
std::map<std::string, void *> my_processors;
public:
void addProcessor(std::string input_category, void * processor)
{ my_processors[input_category] = func; }
void processInput(std::string input_category, InputObj i)
{ my_processors.find(input_category)->second->operator()(i); }
};
class FooProcessor
{ public: void operator(InputObj I) const { /* ... */ } };
class BarProcessor
{ public: void operator(InputObj I) const { /* ... */ } };
int main()
{
ProcessorMgr mgr;
mgr.addProcessor("foo", new FooProcessor());
mgr.addProcessor("bar", new BarProcessor());
InputObj x1, x2;
mgr.processInput("foo", x1);
mgr.processInput("bar", x2);
return 0;
}