Re: how to implement MAP<std::string,TYPE>
{I am letting this one go, but please note that some quoted context
would have made it easier to follow. -mod}
If you wanted to stick to your original design of getting a type from a
map to use as response object, this would be a very simple factory
method design:
boost::shared_ptr<Base> foofactory() {
return boost::shared_ptr<foo>(new foo());
}
boost::shared_ptr<Base> barfactory() {
return boost::shared_ptr<bar>(new bar());
}
typedef boost::function< boost::shared_ptr<Base> (void) >
factory_function;
typedef map<string,factory_function> factory_map;
int main() { // or in your server class
factory_map FactoryMap;
//populate the map
FactoryMap["foo"] = &foofactory;
FactoryMap["bar"] = &barfactory;
// get a command into command
string command = "bar";
// execute command
map_type::iterator commandfunc = FactoryMap.find(command);
if(commandfunc == FactoryMap.end()) {
// bad command ...
} else {
boost::shared_ptr<Base> commandobject = commandfunc->second();
// use command object
}
}
The above design would be useful if you wanted access to handle the foo
and bar response objects in a higher context:
For instance, if each derived class encapsulated a thread running the
response, and you wanted to have the ability of your server class to
kill any of your running threads, you would be able to insert
commandobjects into a vector.
Or, if you couldn't just clone foo and bar because in addition to the
object type, the message to the server included arguments to be passed
to foo or bar, ie
Client - "foo 12 1"
Server - foo x(12,1); x.run();
It would be more complicated if foo and bar took different amounts or
types of arguments, and I'd probably think of a different design at
that point.
Todd
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]