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

Langage C++ Discussion :

template, singleton et object factory


Sujet :

Langage C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut template, singleton et object factory
    Bonjour,

    Je me pose une petite (?) question : je désire implémenter une object factory en template pour ne pas avoir à la recoder N fois, et j'aimerais que chaque factory soit un singleton : est-ce que ça suppose de créer un template singleton et que le template factory soit un template de singleton lui-même ? Je suis un peu paumé, je dois dire...

    Merci

    Marc

  2. #2
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    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
    16
    17
     
    template< class T >
    class Singleton
    {
       // ton code générique singleton
    };
     
    template< class T >
    class SingletonFactory : public Singleton< Factory >
    {
       // ton code de factory
    };
     
    class ObjectSingletonFactory : public SingletonFactory< ObjectSingletonFactory >
    {
       // ton code "concret"
    }
    Qu'est-ce que tu ne comprends pas ?

  3. #3
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Ben moi je n'y comprends pas grand chose en tout cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class SingletonFactory : public Singleton< Factory >
    Comment est définie la classe Factory ?
    Que veux tu dire par "code concret" ? Apparemment [Hugo] souhaite justement créer une factory générique pour éviter d'avoir à réécrire une factory pour chaque objet...


    Je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template< class T >
    class Singleton
    {
       // code générique de singleton
    };
     
    template< class T >
    class Factory :
    {
       // code générique de factory
    };
    Et pour chaque nouvelle classe nécessitant une factory singleton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "Singleton.h"
    #include "Factory.h"
     
    class Truc
    {
    ...
    };
     
    typedef Factory<Truc> TrucFactory;
    typedef Singleton<TrucFactory> TrucSingletonFactory;
    Par contre, il faut ajouter manuellement ces deux typedef à chaque fois. C'est assez pénible, mais je ne sais pas comment faire autrement pour l'instant. (en C++0x, ce sera possible grâce au template typedef )

  4. #4
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 764
    Points
    764
    Par défaut
    Comment est définie la classe Factory ?
    Je pense que c'est une erreur de frappe. Il faut lire SingletonFactory.

    Que veux tu dire par "code concret" ? Apparemment [Hugo] souhaite justement créer une factory générique pour éviter d'avoir à réécrire une factory pour chaque objet...
    Tu est quasiment obligé d'avoir du "code concret", puisque chaque objet se créé différement... sauf si tes objets ne nécessitent pas d'arguments à la construction et de traitement particulier à la destruction :
    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
    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
    45
    46
    template<class T>
    class SingletonFactory : public Singleton<SingletonFactory>
    {
    public :
     
        // ...
     
        T::ObjectType* Create()
        {
            T::ObjectType* pObject = new T::ObjectType();
            lObjectList.push_back(pObject);
            return pObject;
        }
     
        void DeleteObjects()
        {
            std::vector<T::ObjectType*>::iterator iter;
            foreach (iter, lObjectList)
            {
                delete *iter;
            }
            lObjectList.clear();
        }
     
    protected :
     
        std::vector<T::ObjectType> lObjectList;
    };
     
    // Utilisation :
    class ModelFactory : public SingletonFactory<ModelFactory>
    {
    public :
     
        typedef Model ObjectType;
     
        // Si ton objet possède un constructeur avec des arguments,
        // tu peux toujours rajouter la fonction Create idoine "à la main" :
        Model* Create(std::string sFileName)
        {
            Model* pModel = new Model(sFileName);
            lObjectList.push_back(pModel);
            return pModel;
        }
        // Sinon ben y a rien à faire :)
    };
    Je ne connais pas les détails du pattern factory, mais je suppose que c'est un truc du style.

    Edit : j'avais oublié le "typdef Model ObjectType;" dans ModelFactory.

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ce n'est pas important de passer par des templates pour les singletons. Je préfère aujourd'hui passer par des squelettes de code pour réaliser mes singletons.

    De plus, tu as les approches d'ACE et de Loki où les singletons n'ont en fait rien d'intrusif. En gros tu pars d'un type normal N. Et tu le passes en paramètre d'un type singleton qui en fera un singleton de N (==une variable globale disposant de certaines propriétés) .
    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...

  6. #6
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    L'implémentation du singleton de loki est assez hardcore, j'ai essayé de suivre, je m'y suis cassé le nez...
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    C'est à faire avec le livre sous les yeux. Il y un chapitre de 28pages sur le sujet, plus d'autres sur le principe des polices.
    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 chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Depuis le temps que je me dis qu'il faut que je l'achète celui là...
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut
    Bonjour,

    Un immense merci à tous pour vos réponses ... que je méditerai demain : il est trop tard pour ma petite tête .

    Marc

    PS : qu'est-ce que ACE ? Je cherche, mais je ne trouve pas pour le moment...

  10. #10
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Dans un de mes posts récents, j'avais proposé un truc très simple qui marche plutôt bien..

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut
    Coucou,

    Bon, j'ai implémenté pour le moment une version non templatisée de singleton et de object factory. Ca roule. A présent, je vais passer aux versions templatisées, qui risquent d'être bien utiles ! Au point où j'en suis je m'aperçois que je ne suis pas très au clair sur un truc probablement élémentaire : si je ne templatise pas le singleton mais que je laisse tout le code tel quel dans le template de mon object factory, quand je vis vouloir instancier plusieurs version de la factory - avec des paramètres de template différents, est-ce que le singleton va m'en empêcher ? Je ne sais pas si je suis très clair...

    Merci beaucoup à tous !!

    Hugo

  12. #12
    Membre expérimenté

    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
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Citation Envoyé par '[Hugo
    PS : qu'est-ce que ACE ? Je cherche, mais je ne trouve pas pour le moment...
    Je pense qu'il s'agit de ACE.

    MAT.

  13. #13
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    oui, c'est ça.
    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...

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut
    Je ne connaissais pas ! Merci beaucoup à vous deux

Discussions similaires

  1. object factory et classes templates
    Par [Hugo] dans le forum C++
    Réponses: 11
    Dernier message: 03/01/2012, 17h33
  2. [JAXB] Génerer un object factory a partir d'un schema xml
    Par bel09 dans le forum Persistance des données
    Réponses: 0
    Dernier message: 02/06/2009, 16h24
  3. Template, Singleton et Héritage
    Par al2000 dans le forum C#
    Réponses: 3
    Dernier message: 19/04/2009, 20h21
  4. Réponses: 3
    Dernier message: 22/11/2006, 21h10
  5. Réponses: 13
    Dernier message: 25/10/2006, 16h17

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