I want to get rid of the switch statement, reading through one of Martin Fowler's book found that this can be replaced by adding appropriate subclass (for each case condition) and using the same polymorphically in this method.
However, as can be seen by the method getting invoked, they dont seem to be doing similar work, so subclassing them with a common parent would not yeild a common behavior(method) to be abstracted out in the parent class.
Is there any way to get around this situation, or am I better off creating different methods for each case statement?
Subclassing using overloaded ("virtual") functions is an effective, efficient and powerful technique, but your sample code doesn't look like a good fit, since it looks more like you're interested in extracting different selections of data from a SINGLE object than in getting different data from different instances of an object. The fact that the destination data is always of the same type is immaterial.
In practical terms, I would probably keep the switch statement. It's simple, easy to read and unambiguous. And as a plus, most compilers contain extensive functions to optimize switch statements to a bare minimum of overhead.
I might change my mind if things got more complicated, but for the example given, I'd probably not lose sleep over it.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.