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 :

Singleton en C ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Par défaut Singleton en C ?
    Etant un habituer du C++ plutôt que de du C. Je me demande si il existe un moyen d'implémenter ce design pattern en C.
    Par une approche typée objet par exemple, en créant des structures assimilées a des objets.

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par chronos
    Etant un habituer du C++ plutôt que de du C. Je me demande si il existe un moyen d'implémenter ce design pattern en C.
    Par une approche typée objet par exemple, en créant des structures assimilées a des objets.
    On peut faire quelque chose de similiaire en gardant toute la structure secréte et travaillant avec des fonctions dédiées.

    Pour garder la structure secréte il suffit de la définir dans le .c de ton module et tes fonctions prendront en paramètre un pointeur void*.

    Du coup, de l'extérieur du module, tu auras un pointeur vers ta structure mais aucun moyen de connaître sa taille, ce qu'elle contient, etc...

    Ce qui veut dire qu'on ne peut pas en allouer derrière ton dos et donc on doit passer par ta fonction de création dans laquelle tu peux gérer l'idée du singleton.

    Pas sûr que cela soit très conseillé par contre,
    Jc

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salux

    Pas besoin de passer par un void *. Cette technique suffit :
    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
     
    /* .h */
    struct _MonTypeAbstrait;
    typedef struct _MonTypeAbstrait MonTypeAbstrait;
     
    MonTypeAbstrait * mta_create(void);
     
    /*...*/
     
    /* .c */
    struct _MonTypeAbstrait
    {
      int a;
      char * b;
    };
     
    /*...*/

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Par défaut .
    J'avais pensé à quelque chose comme la solution de Gruik, effectivement la solution avec du void* ne me plait pas trop

    Au final je vais refaire un semblant d'objet avec du C, merci pour vos réponses

  5. #5
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    Aprés pour avoir un comportement de type singleton :

    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
     
    /*.c contentant ton destroy et ton create*/
     
    static int iCpt = 0;
     
    int MYCLASS_Create(...)
    {
      if( iCpt == 0)
     {
         //creer
        iCpt++;
     }
      else
       //erreur
      //...
       return //code d'état
    }
     
    int MYCLASS_Destroy(...)
    {
      if( iCpt > 0)
     {
         //detruire
        iCpt--;
     }
      else
       //erreur
      //...
       return //code d'état
    }

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par chronos
    Au final je vais refaire un semblant d'objet avec du C, merci pour vos réponses
    et ça n'a rien de nouveau, c'est extrêmement fréquent en C....


  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Par défaut
    Citation Envoyé par souviron34
    et ça n'a rien de nouveau, c'est extrêmement fréquent en C....

    Je note

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Servlet]Singleton & cache
    Par lucimast dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 15/12/2004, 16h36
  2. Singleton héritable ?
    Par rolkA dans le forum C++
    Réponses: 10
    Dernier message: 11/12/2004, 16h22
  3. [Débutant] pattern singleton
    Par SirDarken dans le forum Débuter avec Java
    Réponses: 22
    Dernier message: 11/12/2004, 01h55
  4. Mutiple row in singleton select ????? [Important, merci]
    Par SkyDev dans le forum Bases de données
    Réponses: 6
    Dernier message: 20/04/2004, 14h02
  5. [debutant]Singleton
    Par bafman dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/01/2004, 15h41

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