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 :

Passer des param�tres � un singleton


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par d�faut Passer des param�tres � un singleton
    Bonjour �vous,
    j'ai une appli qui impl�mente un DP singleton.
    J'aimerais savoir comment on peut passer des param�tres au constructeur ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class CApp
    {
    private:
    	int m_i1;
    	CApp(int i1): m_i1(i1) {}
    public:
    	static CApp& GetInstance() {
    		static CApp s_app;
    		return s_app;
    	}
    //Comment faire ...
    };

  2. #2
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Hs: Personellemnt, j'ai tendance � pr�f�rer un pointeur dans mes Singletons.

    Sinon,bah tu modifie les param�tres de GetInstance de tel sorte que tu passe � ton objet tout ce que veux non ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre confirm�
    Homme Profil pro
    Enseignant
    Inscrit en
    D�cembre 2007
    Messages
    206
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 206
    Par d�faut
    Salut olive_le_malin,

    Je ne suis pas certain que ce soit une bonne id�e, mais si je devais le faire, j'ajouterais une m�thode de classe pour sp�cifier la valeur des param�tres et je v�rifierais � l'entr� de cette m�thode que la m�thode GetInstance n'ait pas d�j� �t� appel�e sans quoi je leverais une exception.

    Voil�, en esp�rant que �a puisse aider

    J�r�me

  4. #4
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Rappel: un singleton, c'est juste une variable globale d�guis�e pour faire bien en soci�t�.
    Donc, tu as aussi le droit de l'initialiser. Pire, si tu veux la construire avec un param�tre, cela veut dire que toute construction paresseuse est impossible.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  5. #5
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut
    En modifiant le mins possible ton code, je dirais comme �a non ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class CApp
    {
    private:
    	int m_i1;
    	CApp(int i1): m_i1(i1) {}
    public:
    	static CApp& GetInstance( int i = 0 ) {
    		static CApp s_app( i );
    		return s_app;
    	}
    //Comment faire ...
    };

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par d�faut
    Bonjour,

    Niamorh : oui bien s�r, on peut faire comme �a, mais �a m'embette un peu de toujours appeller une fonction avec un argument (par d�faut). D'autant plus que dans le cas r�el j'en ai 3, dont certains des objets ...

    Ainsi, je pense que je vais utiliser la m�thode donn�e dans le lien de Luc, qui diff�rencie bien le createInstance(parametres...) et le getInstance(). L'inconv�nient, c'est que l�, on aura forc�ment un pointeur sur objet statique:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    class CApp
    {
    private:
    static CApp* ms_app;
    };
    et un truc tr�s tr�s moche dans le cpp :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    CApp* CApp::ms_app = NULL;
    alors que dans mon code initial, je n'en avais pas ... juste un objet statique "cach�" � l'int�rieur d'une seule fonciton statique ...

    Mais bon ... faut bien faire avec.

    @+

  7. #7
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    ... vu ta contrainte/ton exigence, tu n'as pas le choix.

    EDIT:
    Enfin ... Tu pourrais rajouter une indirection (fa�on pimpl idiom p.ex.) � ton singleton si vraiment tu tiens � tout avoir dans une fonction plut�t qu'en variable (globale) statique de classe.

    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
    struct Singleton {
       Singleton & instance() { // à mettre ailleurs 
          static Singleton s;
          return s;
       }
       void create(params ....) {
          assert(!pimpl_);
          pimpl_ = new Pimpl(params....);
       }
       ...
    private;
       Singleton() : pimpl_(0);
       struct Pimpl { // à mettre ailleurs tant qu'à faire }
       Pimpl * pimpl_;
    };
    Mais franchement, on n'y gagne pas grand chose vu qu'il y a toujours besoin d'une construction explicite. Au lieu d'un Singleton::create(...), il faut appeler Singleton::instance()::create(...).
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Salut,

    Citation Envoy� par olive_le_malin Voir le message
    Mais bon ... faut bien faire avec.
    Ou pas !
    Ou plut�t ou sans (singleton), en g�rant correctement les d�pendances entre objets (et composants)...

    MAT.
    (membre du comit� de soutient � ceux qui font passer des entretiens et � qui on cite spontan�ment, et avec un grand sourire, le singleton comme exemple de design pattern, soit le cscqfpecsgsscedp ou un truc dans le genre)

  9. #9
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par d�faut
    ... vu ta contrainte/ton exigence, tu n'as pas le choix.
    OK, merci Luc

    Ou pas !
    Ou plut�t ou sans (singleton), en g�rant correctement les d�pendances entre objets (et composants)...
    Mat007, j'utilise ce singleton pour regrouper l'ensemble des fonctions "applicatives", ne faisant partie d'aucune classe, et ne regroupant finalement que des objets / variables / fonctions qui auraient d� �tre globale. Par exemple, la r�cup�ration des param�tres g�n�raux de l'application, fonction d'initialisation, de lancement d'un serveur TCP, ... D'ailleurs, je l'appelle CApp. Que proposes-tu comme alternative ?

    @+

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Citation Envoy� par olive_le_malin Voir le message
    Que proposes-tu comme alternative ?
    Dans un premier temps le plus simple serait de cr�er cet objet dans le "main" et de le passer directement aux composants/classes qui en ont besoin.
    Je sais bien que le probl�me c'est que du coup tu vas sans doute devoir le passer en cascade � plein d'autres objets interm�diaires qui ne vont rien en faire que de le passer � leur tour 'plus bas'. C'est d'ailleurs un bon code smell au niveau du processus de cr�ation et qui sous-entend un tr�s (trop ?) fort couplage, que justement l'utilisation de variables globales masque, et qui ne se serait vraisemblablement pas produit sans avoir utilis� de singleton en premier lieu.

    Faut pas se voiler la face, comme il a �t� dit, un singleton c'est une variable globale...

    MAT.

Discussions similaires

  1. Comment passer des param�tre a OpenRecordset
    Par molarisapa dans le forum Access
    R�ponses: 2
    Dernier message: 09/03/2006, 17h14
  2. [JSP]Passer des param�tres dynamiques � un Flash
    Par paulo1b dans le forum Servlets/JSP
    R�ponses: 1
    Dernier message: 27/11/2005, 21h29
  3. [D�butant][C#]Passer des param�tres � un exe
    Par G�niuS77 dans le forum Windows Forms
    R�ponses: 13
    Dernier message: 05/07/2005, 16h55
  4. R�ponses: 7
    Dernier message: 30/12/2004, 12h01
  5. passer des param�tres � un fichier sql
    Par vbcasimir dans le forum Oracle
    R�ponses: 2
    Dernier message: 21/12/2004, 18h08

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