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.







Répondre avec citation
Partager