I recently had a similar dilemma parsing elf files.
Once I'd read all the sections of the file, I had an array of elf-section objects. Some of the sections have quite complicated semantics (eg relocation entries referencing symbols, symbol names, and some other code/data section) that couldn't really be accounted for while the sections were being read.
So I had two options - do a second pass over the sections, chaging them to a more specialised type than elf-section and have specific methods specialise on these for symbol lookup, or string lookup or whatever, or just have a number of different methods for retreiving different things specialised only to the base section type.
I went with this but I'm beginning to think it was the wrong decision in terms of long-term extensibility - it would be better to have the sections specialise themselves as there are many possible types: ultimately it's a means of reducing the combinatorial explosion becaue the section-entry acessors specialise only on what they have to and not on the general case and validate they are used correctly.