Возможно ли как-то передать в параметр функции класс, по которому нужно будет создать объект?
Есть некая функция creator(...) которая должна создать объект. Но внутри неё неизвестно какого класса это будет объект, это известно только при вызове этой функции, "снаружи". Можно ли как-то передать туда ссылку или имя класса, по которым будет создаваться этот объект?
ЗЫ знаю что можно создать объект в параметрах creator(new MyClass) но в этой же функции решается вообще необходимость создание этого объекта. Можно создавать его каждый раз, а потом удалять если создание было ненужно, но это грязнохак и как-то не по-человечи
ЗЗЫ еще можно логику решения создавать объект или нет вынести за функцию, но тогда я нарушу принцип DRY. Там под каждый класс придется проверять
Roman, хм. А вот тут оффтопик немного, потому как философский вопрос. Стоит ли городить такие абстракции, если это решается индусским но простым кодом:
void WindowsManager::openSettingsWindow()
{
if (windows["SettingsWindow"] == nullptr) {
windows["SettingsWindow"] = new SettingsWindow;
windows["SettingsWindow"]->show();
} else {
windows["SettingsWindow"]->activateWindow();
}
}
// и таких функций на каждое окно, коих штук 6-10
gense, ты пишешь про философию, DRY, показываешь наружу стремление писать чистый, поддерживаемый и расширяемый код и при этом рука поднимается писать такой код?
С такими взглядами ты должен подсознательно стремиться писать на максимальном уровене абстракции и общности.
Если говорить про Qt то там уже есть подобный функционал
Roman, Стремиться и уметь разные вещи ))) И вопрос грани между оправданной абстракцией и практичностью мне не всегда понятен. С фабрикой выглядит на самом деле громоздко.
Кстати, QApplication::allWidgets() возвращает список созданных объектов виджетов в приложении. А у меня виджет может быть еще не создан к моменту обращения.
Но за идею и ссылки спасибо.