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 :

Pourquoi cout est-il d�fini comme cela?


Sujet :

C++

  1. #1
    Membre r�gulier
    Homme Profil pro
    Ing�nieur de recherche
    Inscrit en
    Octobre 2014
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur de recherche
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par d�faut Pourquoi cout est-il d�fini comme cela?
    Bonjour,

    j'aimerais cr�er un syst�me de fichiers similaire � cout / cin / clog / cerr.

    Ma premi�re id�e �tait de cr�er des classes pour g�rer le fichier d'entr�e, le journal, etc.
    Pour que ces classes soient accessibles partout, j'avais d'abord pens� � des singletons.

    Mais, en regardant de plus pr�s, il semble que cout soit en fait une instance de ostream d�clar�e avec le mot-cl� "extern" pour assurer sa globalit� dans le programme.
    J'imagine que je devrais �galement adopter cette approche, en d�clarant externes des instances de ofstream et ifstream.
    Mais j'ai beaucoup de mal � le justifier.
    Pour faire simple : cela ressemble � premi�re vue � une approche h�rit�e du langage C.

    Est-ce que vous pouvez m'expliquer l'int�r�t d'utiliser le mot-cl� extern plut�t que le mot-cl� static dans un singleton?

    Merci infiniment pour votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par d�faut
    Tu trouveras ta r�ponse ici:

    http://en.wikibooks.org/wiki/More_C%.../Nifty_Counter

    C'est une affaire d'initialisation et de fermeture dans le bon ordre...

  3. #3
    Membre r�gulier
    Homme Profil pro
    Ing�nieur de recherche
    Inscrit en
    Octobre 2014
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur de recherche
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par d�faut
    Bonjour stendhal666,

    merci beaucoup pour ton lien mais je n'ai pas compris la r�ponse qu'il apporte � ma question.
    J'ai l'impression qu'il montre plut�t comment g�rer l'initialisation et la fermeture d'objets statiques.
    C'est un probl�me compliqu� qui d�passe m�me le cadre de l'idiome que tu fournis quand tu projettes de faire de la programmation concurrentielle.
    Mais cela se g�re avec des singletons (voir les travaux d'Alexandrescu sur le sujet).

    De plus, je ne pense pas que cout soit g�r� avec l'idiome que tu mentionnes, contrairement � ce qui est affirm� dans ton lien.
    Il me semble qu'il s'agit d'une instance de ostream et que la globalit� est justement assur�e par le mot-cl� "extern".
    A ma connaissance, il n'y a pas de notion explicite de comptage d'instance.

    Reformul�e tr�s simplement, ma question pourrait �tre : pourquoi utiliser "extern" plut�t que "static" pour g�rer des entr�es/sorties de fa�on globale?

  4. #4
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par d�faut
    Eh bien, j'avais tendance � faire confiance � cette source, mais l'argument d'autorit� est toujours mauvais

    En revanche, si tu es d'accord avec moi que cout, clog, cerr, etc. sont des instances de ostream, comment veux-tu les impl�menter comme singleton (c'est � dire classe avec une et une seule instance) ?

    Sur le mot cl� extern, je ne suis pas s�r de l'utilit� (plut�t que de d�finir une instance statique (!= singleton) dans le header). Peut-�tre est-ce pour factoriser la r�cup�ration de la console avec la librairie h�rit�e de C.

  5. #5
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    std est un namespace.
    extern indique "cette variable existe mais est d�clar� dans une autre unit� de compilation".
    static indique "cette variable n'existe que dans cette unit� de compilation, chaque unit� de compilation doit la red�finir". M�me comportement qu'un namespace anonyme.
    static serait possible s'il s'agissait d'une structure mais pas pour un namespace.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  6. #6
    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
    Ce ne sont pas des singletons, mais des variables globales -> d'o� extern.
    cout est un globale de type ostream dont le streambuf est en fait un filebuf. Et il y a une feinte pour s'assurer que cout est correctement initialis� avant un maximum de choses.

    Je suppose que "static" est � interpr�ter comme "static class storage" -> i.e. une variable qui vit dans l'espace des globales ; et pas comme � visibilit� limit� � l'UT courante. Le mot est porteur des 2 sens qui parfois sont incarn�s simultan�ment dans certains variables.

    Bref, quand on veut �crire des choses qui ressemblent � des flux mais qui font des trucs l�g�rement diff�rent, c'est les streambuf qu'il faut sp�cialiser. Apr�s, m�me cout pourra utiliser ton streambuf que tu auras ajust� � tes besoins.

    PS: les singletons ont le m�me genre de propri�t�s ind�sirables que les globales.
    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...

Discussions similaires

  1. R�ponses: 13
    Dernier message: 12/11/2011, 19h20
  2. [E-00]tester si une cellule est d�finie comme liste de validation ?
    Par Australia dans le forum Macros et VBA Excel
    R�ponses: 8
    Dernier message: 01/12/2008, 09h17
  3. R�ponses: 17
    Dernier message: 07/01/2008, 12h40
  4. R�ponses: 5
    Dernier message: 17/08/2006, 17h32
  5. R�ponses: 6
    Dernier message: 09/02/2006, 12h33

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