IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[R�solu]Singleton avec template de fonction


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    32
    D�tails du profil
    Informations personnelles :
    Localisation : France, Essonne (�le de France)

    Informations forums :
    Inscription : Avril 2013
    Messages : 32
    Par d�faut [R�solu]Singleton avec template de fonction
    Bonjour,

    Je souhaite r�aliser une classe permettant de g�rer le chargement des ressource sons et images avec sfml. Le chargement �tant identique au type pr�t (sf::Image ou sf::SoundBuffer) entre les deux, j'ai d�cid� de cr�er une classe template singleton qui charge et conserve les m�dias en m�moire. L'objectif est donc de pouvoir charger des m�dias de la mani�re suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    MediaManager<sf::SoundBuffer>::getInstance()->getMedia("chemin vers le son");
    MediaManager<sf::Image>::getInstance()->getMedia("chemin vers l'image");
    Pour r�aliser cette classe, je m'y suis pris de la mani�re suivante :

    MediaManager.hpp :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #include <SFML/Audio.hpp>
    #include <iostream>
    #include <map>
     
    template<class T> class MediaManager
    {
    public:
    	static MediaManager<T>* getInstance()
    	{
    		if (NULL == _singleton)
    		{
    			std::cout << "DEBUG: MediaManager | Creation du singleton." << std::endl;
    			_singleton = new MediaManager<T>;
    		}
    		return _singleton;
    	}
     
    private:
    	static MediaManager<T>* _singleton;			//Pointeur du singleton
     
    	MediaManager();
     
    };
     
     
    template<class T> MediaManager<T>* MediaManager<T>::_singleton = NULL;
    Avec simplement la cr�ation de la classe sous forme de singleton, je me retrouve avec une erreur de link sur getinstance() :

    Erreur 2 error LNK2019: symbole externe non r�solu "private: __thiscall MediaManager<class sf::SoundBuffer>::MediaManager<class sf::SoundBuffer>(void)" (??0?$MediaManager@VSoundBuffer@sf@@@@AAE@XZ) r�f�renc� dans la fonction "public: static class MediaManager<class sf::SoundBuffer> * __cdecl MediaManager<class sf::SoundBuffer>::getInstance(void)" (?getInstance@?$MediaManager@VSoundBuffer@sf@@@@SAPAV1@XZ)
    Je ne vois pas ce que je fais de mal ici, une id�e pour me guider ?

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    F�vrier 2009
    Messages
    762
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 762
    Par d�faut
    Je pense que tu n'as pas impl�ment� le constructeur par d�faut (on ne voit que la signature dans l'exemple) ou que tu l'as impl�ment� dans un .cpp, vu que c'est une classe template tout doit �tre dans le .hpp.

    Aussi, si tu utilises plusieurs threads, sache que ton code n'est pas thread-safe, si tu utilises C++11, je te conseille de faire simplement �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    static MediaManager<T>& getInstance()
    {
      static MediaManager<T> manager;
      return manager;
    }
    Et m�me si tu n'utilises pas plusieurs threads, ce code est quand m�me plus clair, je ne vois pas l'avantage de passer par un pointeur...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    32
    D�tails du profil
    Informations personnelles :
    Localisation : France, Essonne (�le de France)

    Informations forums :
    Inscription : Avril 2013
    Messages : 32
    Par d�faut
    En effet, je me suis concentr� sur les templates alors que l'erreur �tait toute b�te, c'�tait bien le constructeur.
    Je ne connaissais pas cette impl�mentation pour les singletons et je vais l'utiliser m�me si je n'ai pas besoin de thread, c'est en effet beaucoup plus clair et l�ger comme �a.

    Merci beaucoup !

Discussions similaires

  1. Surcharg� une fonction template avec template
    Par SKone dans le forum Langage
    R�ponses: 2
    Dernier message: 12/10/2014, 20h00
  2. [R�solu] Probleme avec la fonction count
    Par GanJahLove dans le forum G�n�ral Python
    R�ponses: 7
    Dernier message: 05/11/2013, 19h49
  3. R�ponses: 32
    Dernier message: 28/11/2010, 17h33
  4. Pointeur de fonction avec template
    Par ehmicky dans le forum Langage
    R�ponses: 5
    Dernier message: 23/11/2010, 02h07
  5. R�ponses: 1
    Dernier message: 12/01/2009, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo