Я реализую шаблон фабрики для создания компонентов и хочу реализовать контейнер singleton для всех экземпляров каждого типа, созданного на заводе. В идеале это будет один вектор для каждого типа, созданного на заводе.Создатель компонента шаблона фабрики C++ с контейнером singleton
Это было бы очень легко, если бы я мог хранить указатели базового класса в векторе, но, увы, мой прецедент предпочел бы, чтобы все экземпляры сохранялись смежно, а не где бы то ни было, что новые ставят их, чтобы получить как можно больше кеш-запросов.
Я думал о делать что-то подобное для заводской карты:
Map<string,pair<constructorFnPtr, vector<baseClass>>
Это вопрос о потере данных из производного класса, как он приводится к базовому классу.
Я также думал, что указатель на вектор как второй член пары был бы хорошим способом сделать это, но я не уверен, как это можно реализовать при сохранении другого типа данных, хранящегося в каждый вектор. Я не думаю, что это было бы возможно, поскольку шаблонные векторы - это все технически разные классы.
Есть ли способ сделать то, что я пытаюсь сделать? Я пытался понять что-то за последние пару дней без везения.
Альтернативно, если есть другой хороший способ хранения векторов (то есть как статический член класса компонента), я также открыт для любых подобных предложений!
попробуйте использовать 'dynamic_cast', где вы получите нужный вам тип, но если экземпляр не тот, он вернет null или throw:' dynamic_cast (myour_map ["instance"]. Second [0]) 'if" экземпляр "не является' TypeIWant', он вернет null или throw (на основе параметров компилятора) –
Raxvan
Да, это работает для получения экземпляра вне фабрики, но не работает для размещения его в векторе экземпляров. Я не хочу вектор указателей, потому что накладные расходы для извлечения их из основного бара для каждого экземпляра каждый раз, когда они повторяются, очень высоки. –