Посмотрите на шаблон фабричного дизайна.На фабрике вы передадите заголовок -> тип файла, и он сгенерирует читателя для этого файла.Поэтому вы должны определить интерфейс IFile и реализовать его в ваших классах PdfFile, TxtFile, DocxFile и т. Д.
Вы можете использовать абстрактную фабрику или фабричный метод в зависимости от ваших требований. Я приведу пример абстрактной фабрики:
class IFileFactory{
public:
virtual IFile* getInstance( const std::string& fileHeader ) = 0; //header in hex representation.
};
class ConcreteFileFactory : public IFileFactory{
IFile* getInstance( const std::string& fileHeader ){
if( fileHeader == "33442233" )
{
return new PdfFile();
}else if( fileHeader == "4455533" ){
return new DocxFile();
}
//......
throw FactoryException("Unknown file");
}
};