Парсер: свой класс для каждого типа входных строк
От: Аноним  
Дата: 23.01.09 15:26
Оценка:
Насколько правильным было бы использовать такую структуру приложения:

Имеется один тип данных (Oper), объекты которого считываются из файла. Однако, в файле они представлены существенно по-разному.

Допустим, мы считываем операции какого-либо ассемблера.

Насколько красиво выглядел бы такой подход к считыванию: создаются отдельные классы, каждый класс расчитан на то, чтобы заполнить объект типа Oper по ассемблеру конкретной операции. Например, для операции call — class CallFiller и т.п. Но каждый такой класс умеет по строке отличить, его ли это тип данных.

Реализовать такое можно было бы также по-разному.

Например, создать абстрактный базовый класс Filler для всех конкретных классов считывания операции. Потом создать массив указателей по Filler по одному на конкретную реализацию. И при считывании строки с одной операцией проходить по массиву и предлагать каждому классу распарсить строчку, пока кто-то из них не согласится распарсить.

Но если лень заполнять массив вручную, то можно занумеровать все классы парсеров операций при помощи специализации шаблона по константе. И сделать рекурсивную шаблонную функцию, которая заполняла бы массив сама.

А, с другой стороны, если уж дело дошло до метопрограммирования, то можно и вообще не использовать массив, а использовать эту шаблонную функцию с рекурсивным вызовом, которая предлагает каждому классу, обращаясь через его номер, распарсить строчку. А в классах сделать статические методы и не создавать их экземпляров.

Насколько такой подход адекватен?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.