Bonjour,
J'ai crée une classe "Referencable", qui est une classe template, et dont je voudrai faire hériter tous mes objets qui peuvent être "référencés": c'est à dire dont on garde une liste (id, objet), qui permet d'éviter la création d'objets "en double" (c'est pour gérer des textures dans un petit moteur de jeu).
Voici la classe (implémentée dans l'header, pour une autre raison):
Code :
- template<typename T> class Referencable
- {
- public:
- static T *ref(const char *c_id)
- {
- static std::map<std::string, T*> _collection; // hack pour cause de compilateur chiant
- std::string id(c_id);
- if(_collection.count(id) != 0)
- {
- _collection[id]->_refCount++;
- }
- else
- {
- _collection[id] = new T;
- }
- return _collection[id];
- }
- void unref()
- {
- _refCount--;
- if(_refCount <= 0)
- delete this;
- }
- protected:
- Referencable() : _refCount(1) {}
- int _refCount;
- };
|
Ensuite, je n'ai plus qu'à faire hériter ma classe Texture de Referencable<Texture>, à déclarer Referencable<Texture> comme "friend", et ça roule, je peut instancier mes textures avec Texture::ref("id" );
Maintenant, j'ai besoin de créer une nouvelle classe, disons TextureSpeciale, qui dérivera elle-même de Texture... et c'est là que ca marche plus !
J'ai bien essayé de faire re-dériver TextureSpeciale de Referencable<TextureSpeciale>, mais je me mange des "error: reference to 'ref' is ambiguous" à la compilation.
Quelqu'un peut m'éclairer, ou me proposer une autre solution viable ?
Merci d'avance !
Thoduv
Message édité par thoduv le 04-07-2008 à 14:40:32