Bonjours à tous, je susi entrain de re-voir un peu comment marche le pattern singleton, notament le code de loulou dans la première partie de son moteur 3D.
Ca va à peu près mais j'ai une erreur de link dés que je tente d'utiliser la méthode "Instance()" .
J'ai vu en téléchargant le code source de la dernière partie de son tutorial que son implémentation du singleton avait changé entre temps (ca gagnerait d'ailleurs a figurer dans la partie I du tutorial je pense.).
J'ai vu un morceau de code que je ne comprend pas, ca me parait assez "barbare" et je me demandais :
1) Pourquoi il fallait utiliser ca?
2) Comment ca marche? ( je supose que ca doit intimement être lié au "pourquoi")
3) Y'a moyen de faire autrement ? (sans devoir insérer deux macro dans chaqune de nos classe
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23//////////////////////////////////////////////////////////// /// Macro automatisant la création d'un singleton -- /// à placer dans la définition de la classe concernée. /// La raison pour laquelle il faut redéfinir (et masquer) /// la fonction Instance() reste obscure, mais si ce n'est pas /// fait le client obtient des erreurs de link sur Inst //////////////////////////////////////////////////////////// #define MAKE_SINGLETON(Class) \ public : \ friend class Yes::CSingleton<Class>; \ static Class& Instance(); \ private : //////////////////////////////////////////////////////////// /// Macro automatisant //////////////////////////////////////////////////////////// #define SINGLETON_IMPL(Class) \ template <> Class* Yes::CSingleton<Class>::Inst = NULL; \ Class& Class::Instance() \ { \ return Yes::CSingleton<Class>::Instance(); \ } \
EDIT : voila pour le moment mon code minimal qui pose problème :
main.cpp
Application.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Singleton.hpp
Singleton.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
L'erreur à la compilation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
error LNK2001: symbole externe non résolu "private: static class Application * Singleton<class Application>::Inst_" (?Inst_@?$Singleton@VApplication@@@@0PAVApplication@@A)

 

 
		
		 
        

 
			
			




 Erreur de link sur l'implémentation des singletons .
 Erreur de link sur l'implémentation des singletons .
				 Répondre avec citation
  Répondre avec citation
Partager