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 :

[POO] Plugins et singletons


Sujet :

C++

  1. #1
    Membre actif Avatar de Rewpparo
    Homme Profil pro
    Amateur
    Inscrit en
    Décembre 2005
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 170
    Points : 281
    Points
    281
    Par défaut [POO] Plugins et singletons
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é ?

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    J'avoue que je ne comprends pas tout à ton problème. Tu as deux instances de Singleton<>: une dans l'appli hôte et une dans le plugin, et tu veux synchroniser les deux pour que ce soit un vrai singleton? Je répondrais à ta question par une autre question: pourquoi as-tu deux instances de Singleton<>? D'ailleurs, pourquoi as-tu des instances de Singleton<>? N'as-tu pas un problème de conception?

Discussions similaires

  1. [JavaScript] [POO] Créer un singleton, en JavaScript
    Par Lcf.vs dans le forum Contribuez
    Réponses: 2
    Dernier message: 06/03/2013, 00h21
  2. POO design pattern Singleton avec Windev
    Par Atsibat dans le forum Contribuez
    Réponses: 2
    Dernier message: 30/11/2012, 13h57
  3. [PHP 5.0] [POO] Comportement du singleton
    Par eltyty dans le forum Langage
    Réponses: 1
    Dernier message: 03/11/2009, 00h47
  4. [POO] Gestion des Singleton
    Par Bisûnûrs dans le forum Langage
    Réponses: 5
    Dernier message: 05/09/2008, 21h49
  5. [POO] Plugins pour une classe ?
    Par PseudoCoder dans le forum Langage
    Réponses: 6
    Dernier message: 05/10/2006, 12h03

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