Представьте, что у меня есть группа связанных с C++ классов (все они расширяют один и тот же базовый класс и предоставляют один и тот же конструктор), которые я объявлял в общем файле заголовка (который я включаю), и их реализации в некоторых других файлах (которые я компилирую и ссылка статически как часть сборки моей программы).Создавать класс от имени?
Я хотел бы иметь возможность создать экземпляр одного из них, передавая имя, которое является параметром, который должен быть передан моей программе (либо в виде командной строки, либо как макрос компиляции).
Единственным возможным решением я вижу использовать макрос:
#ifndef CLASS_NAME
#define CLASS_NAME MyDefaultClassToUse
#endif
BaseClass* o = new CLASS_NAME(param1, param2, ..);
ли это только ценный подход?
«Расширенная версия этого (позволяющая независимым разделам кода регистрировать свои классы) будет представлять собой карту <имя, указатель фабричной функции>». было бы возможно, из определения класса, зарегистрировать себя на этой карте, если эта карта находится на фабрике в другом месте? В Java я мог/сделал бы это, используя static {} constructors. На самом деле я не хочу, чтобы каждый новый подкласс, который я пишу, изменял код Factory. – puccio