Пишу игру на плюсах и SFML и в процессе написания менеджера ресурсов столкнулся с проблемой. Подробное описание:
- Есть шаблонный класс ResourceManager, хранит ресурсы в std::unordered_map в виде указателя (std::shared_ptr) и ключа.
- Ресурсы хранятся внутри zip архива, поэтому я написал класс-наследник от sf::InputStream, благо все классы (Texture, Shader, SoundBuffer, Font, Music) имеют метод loadFromStream.
Проблема заключается в том, что sf::Music и sf::Font при этом не загружают ресурс в память полностью (как все остальное), а продолжают читать из стрима по частям.
Получается, экземляр стрима для них тоже нужно где-то хранить и уничтожать только после вызова деструктора объекта класса, читающего из этого стрима.
Как можно это все элегантно оформить? Пока на ум приходит только засунуть это все в std::pair.