Bonjour à toutes et à tous !

J'ai récupéré le code source d'une application que je dois optimiser. Il y a quelques variables globales dans cette application et je souhaite mettre à profit le Design Pattern Singleton.

J'ai récupéré un code source définissant une classe template singleton (.h suivant) :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
#ifndef _SINGLETON_H
#define _SINGLETON_H
 
template <class T>
class CSingleton
{
	public:
		// Renvoi l'instance unique de la classe
		static CSingleton* Instance()
		{
			if( !pInst )
				pInst = new T;
 
			return pInst;
		}
 
		// Détruit l'instance unique de la classe
		static void Destroy()
		{
			delete pInst;
			pInst = NULL;
		}
 
	protected:
		// Constructeur par défaut
		CSingleton();
 
		// Destructeur par défaut
		~CSingleton();
 
	private:
		// Donnée membre
		static T* pInst;
 
		// Copie interdite
		CSingleton(const CSingleton&);
		void operator=(const CSingleton&);
};
 
// Déclaration de notre variable statique
template <class T> T* CSingleton<T>::pInst = NULL;
 
#endif
Jusque la pas de problème , pas de problème de compilation.

Etape suivante, je souhaite créer mes propres classes dérivant de cette classe template ... hop c'est parti en faisant comme ci après (j'ai juste utilisé un .h) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
#ifndef _UN_SINGLETON_H
#define _UN_SINGLETON_H
 
class CUnSingleton : public CSingleton<CUnSingleton>
{
	friend class CSingleton<CUnSingleton>;
};
 
#endif
Là encore je compile et aucune erreur

Mon problème est le suivant : comment déclarer dans mon main une variable de type CUnSingleton ? Quand je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
CSingleton<CUnSingleton>* S = CSingleton<CUnSingleton>::Instance();
ça passe pas et j'ai le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
TEMPLATE_SINGLETON.obj : error LNK2001: unresolved external symbol "protected: __thiscall CSingleton<class CUnSingleton>::CSingleton<class CUnSingleton>(void)" (??0?$CSingleton@VCUnSingleton@@@@IAE@XZ)
Est ce que quelqu'un a une idée à me proposer pour résoudre mon problème ?

D'avance merci.