Bonjour a tous,
J'essaie de faire un système de singleton qui puisse se transmettre a un plugin, et je dois admettre que j'ai du mal.
Mon idée était de faire une base de registre qui enregistre un pointeur vers chaque singleton a leur création. Quand un plugin est chargé, on lui passe la base de registre, et il transmet leurs instances a toutes les variables statiques des singletons.
Pour faire les singletons, j'utilise une classe templatée Singleton qui correspond a ce qui se fait partout. Bien entendu, je ne peux pas faire une liste de classes qui ont des arguments de templates différents, donc j'ai fait dériver le tout d'une classe SingletonBase.
Le plugin recoit donc une liste de pointeurs vers des SingletonBase, et le but du jeu serait de faire en sorte que chaque instance mette a jour sa variable statique dans Singleton<>.
Ça marche si je met une fonction dans Singleton:
Singleton<>::ResetInstance(){mInstance=this;}
mInstance étant la variable statique. Le singleton est alors synchronisé entre le plugin et le programme. Mais le plugin ne reçoit que des SingletonBase, et ne sait pas comment est instancié le template. Faire une fonction virtuelle dans SingletonBase ne marche pas, ca met a jour coté programme.
Bref je cherche depuis plusieurs jours un moyen de faire mettre a jour la variable statique dans Singleton<> a partir d'une instance de SingletonBase, sans succès. J'ai d'autres pistes si jamais c'est absolument impossible, mais elles sont beaucoup moins optimales.
Est ce que quelqu'un a déjà été confronté a un problème similaire ? Quelle solution avez vous trouvé ?
Partager