I created a resource system in CPP:
template<typename T>
class Resource{
public:
Resource() {}
void push(std::shared_ptr<T> pRes) {
_items.emplace(_nextId++, pRes);
}
friend class ResourceManager;
private:
size_t _nextId{ 0 };
std::unordered_map<size_t, std::shared_ptr<T>> _items;
};
class ResourceManager{
public:
ResourceManager() {}
~ResourceManager() {
for (auto& pair : _resources) delete pair.second;
}
template<typename T>
void register() {
Resource<T>* pRes = new Resource<T>;
_resources.emplace(typeid(T).name(), (void*)pRes);
}
template<typename T>
Resource<T>& getResource(){
return *(T*)_resources[typeid(T).name()];
}
private:
std::unordered_map<std::string, void*> _resources;
};
Now I want to add a method to ResourceManager to modify all registered resources inside _resources. How can I typecast void* with stored typeid(T).name()?