У меня есть система инвентаризации, в которой хранятся типы «Item», которые являются абстрактным классом. У меня есть производный класс под названием «Skates». Программа позволяет пользователю добавлять «Skates» в вектор указателей «Item». Пользователь вводит модель и идентификатор коньков, и я создаю объект «Skates» с этими параметрами. Затем я использую указатель «Item», чтобы указать на объект «Skates» и добавить его в вектор. Когда пользователь хочет отредактировать объект «Коньки», мне нужно выполнить динамическое преобразование его обратно в объект «Коньки», а затем отредактировать его.Как сделать систему инвентаризации консоли динамической
std::vector<Item*> ItemCollection;
Item * item = new Skates("model1", 1);
ItemCollection.push_back(item);
//To retrieve it
Skates * skatesToEdit = dynamic_cast<Skates*>(ItemCollection[0]);
Проблема я столкнулся сейчас на счет нового производного класса, класса «скейтборд», например. Я не хочу, чтобы создать новый метод для обработки редактирования класса «скейтборд», как:
Skateboard * skateboardToEdit = dynamic_cast<Skateboard*>(ItemCollection[0]);
Так как это будет означать, что каждый раз, когда я делаю новый производный класс, мне нужно, чтобы написать этот же стиль коды каждый раз. Поэтому я хотел бы знать, есть ли способ заставить приложение динамически знать, что такое производный класс, без необходимости его указывать. Таким образом, он должен иметь возможность определять тип данных, а затем предлагать пользователю редактировать любое свойство, которое у него есть (поскольку цель состоит в том, чтобы пользователи могли сначала редактировать объект) одним динамическим методом, который, я думаю, должен быть невозможным.
Вам нужно знать, что предмет? Не могли бы вы создать чистую виртуальную функцию для элемента, переопределить ее в Skates и Skateboard и просто вызвать виртуальную функцию как функцию-член ItemCollection [x]? Таким образом, вам не нужно знать, что такое элемент: система будет сортировать его для вас. – cup
Извините, я не вижу, как это позволит мне вернуть Item как производный класс для редактирования свойств, специфичных для этого производного класса. Возможно, я недопонимаю. – Stein121