Bonjour,
j'ai un problème de conception, j'ai une classe de base qui gère les ressources défini comme suit :
Puis vient cette classe template :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class RessourceManagerBase { public: virtual ~RessourceManagerBase() { } virtual void construct(nlohmann::json& json) = 0; };
Afin d'être utilisé dans le code comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 template <typename T> class RessourceManager : public RessourceManagerBase { public: void construct(nlohmann::json& json) { } std::map<std::string, T*>& getList() const { return _object; } private: std::map<std::string, T*> _object; };
Jusque là aucun soucis. Le problème c'est comment est-ce que je peut récupérer les objets contenus dans _object.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 std::map<std::string, RessourceManagerBase*> _manager; _manager["tile"] = new RessourceManager<Tile>();
Je voulais écrire ça :
Mais vu que _manager stock des string et des RessourceManagerBase* ça ne peut pas fonctionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::map<std::string, Tile*> t = _manager["tile"]->getList()
Je ne peut pas mettre ma fonction en virtuel dans la classe RessourceManagerBase puisque elle retourne un template...
Du coup je ne sais vraiment pas comment faire, merci de votre aide.
Partager