Bonjour,
J'ai un probleme de context entre mon binaire et une lib statique _Et dynamique_ que j'ai fait.
Je voulais savoir si quelqu'un a une solution.
J'ai un template Singleton basique du genre :
cela marche tres bien, mais le probleme intervient quand une class de ma lib static derive de ce template en lui donnant son propre type.
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 template <typename T> class Singleton { public: static T& get(void); static void destroy(void); protected: Singleton(void); virtual ~Singleton(void); protected: static T *s_pInstance; };
ex :
Je crois que le compilo me cree deux classes (une pour mon binaire et une pour ma lib _statique_ dynamique) a la compil pour un meme type T.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class Foo : public Singleton<Foo> { friend class Singleton<Foo>; };
(logique vu que le template est dans le .h, utilise par la lib et le binaire a la compil)
du coup, lorsque je fais un Foo::Get(), selon que je sois dans du code implemente dans mon binaire ou dans ma lib (dynamique), ce n'est en realite pas la meme classe qui est appele, du coup les s_pInstance sont logiquement different, et mon Singleton n'en est plus un ! et ca fou mechament le bordel.
Si je n'ai plus de template, mais que je me paluche le Get Destroy static directement dans ma classe Foo, alors la pas de soucis, il n'y a bien qu'une classe et donc qu'une instance, mais j'ai besoin de ce template.
--> en fait non, ca ne marche pas non plus.
merci d'avance pour votre aide.
Partager