2016-09-23 2 views
1

Я разрабатываю приложение на C++, где мне нужно создать X количество классов. Скажем: класс AAA, BBB и CCC. Каждый класс соответствует одному типу объекта, который мне нужно будет обрабатывать. С другой стороны, у меня есть входной файл типа CVS. Одним из примеров этого входного файла выглядит следующим образом один:C++ 11 Создание объекта неизвестного класса

AAA,3432443,433434,11111,45678 
AAA,8778776,786698,22222,86881 
BBB,4452332,112234,34543,87734 

Итак, мне нужно, чтобы разобрать, что входной файл, и в соответствии с первым элементом линии (AAA, BBB, CCC), мне нужно, чтобы создать соответствующий объект, который сохранит другие значения, найденные в строке. НО, я не могу «встроенный» в приложении возможные классы (AAA, BBB, CCC), с тем чтобы использовать цепочку условными, как: if (token == "AAA") then AAA aaa = new AAA (params); Вместо:

  • Приложение должно оставаться независимым от существующих классов, таким образом, чтобы в будущем мы могли добавлять классы DDD, EEE, ... ZZZ, не изменяя модуль, который создает объекты (в случае использования условных выражений я должен добавить, например: if (token == "DDD") then DDD ddd = new DDD(params). Это запрещено .
  • Я создал файл конфигурации, который предоставляет возможные типы классов в текущем исполнении: AAA BBB CCC ... Таким образом, я могу перебрать эти типы классов и сравнить их с теми, которые считываются из первого элемента во входных строках файла. Но я застрял в проблеме того, как я могу создать объект неизвестного класса. Что-то вроде этого: retrieved_type_from_input_file object = new retrieved_type_from_input_file(params); где «retrieved_type_from_input_file» является переменной, которая содержит эффективный тип класса я должен создать: AAA ... ZZZ
  • Я имею в виду, в обобщенном программировании. Что-то вроде: T object = new T(params); Но даже если я могу закодировать это внутри класса; в реализации мне нужно настоящее имя класса.
  • Я также думаю о реализации какого-либо шаблона Factory, создающего абстрактный абстрактный родительский класс («Thing»), из которого все будут наследовать (класс AAA: public Thing). Но все модели, которые я нахожу, прямо указывают на имя класса, в некотором месте кода, в момент создания объекта.

Любая помощь пожалуйста? Большое спасибо!

+0

Посмотрите «заводской шаблон». – Peter

+0

Если вы можете сделать некоторое форматирование, это упростит чтение. Благодарю. –

+0

C++ не имеет отражения. –

ответ

0

я угадываю, вы нуждаетесь в генератор кода:

Шаг 1. Напишите программу, которая генерирует классы в .h, .cpp файлов на основе файла конфигурации.

вы можете создать ALSE/объявлять объекты классов в этом шаге

Шаг 2. Сделайте использование сгенерированных классов, чтобы создать исполняемый файл.

Это моя грубая идея и поиск других возможностей от других.

+0

Привет, у вас появилась возможность реализовать, как вы это сделали, и мало любопытно. Вы используете фабричный или используемый генератор кода или что-то еще. – vsmph

Смежные вопросы