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 :

[Débutant] Utilisation d'un objet "partagé"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Par défaut [Débutant] Utilisation d'un objet "partagé"
    Bonjour à vous !

    Ce problème vous paraîtra peut-être simplissime mais je débute et je pense que tout le monde a été confronté à cette question.

    Je cherche tout simplement à créer un objet log, servant donc à écrire dans un fichier ce qui se passe dans mon appli.
    Bien sûr, chaque objet de mon application est susceptible d'écrire dans ce log.

    Je me posais donc la question de savoir quelle implémentation était la plus convenable.
    Utiliser un pointeur vers cet objet dans tous les objets créés me paraît lourd.
    J'ai aussi pensé à un objet statique, visible de tous.

    La question se pose aussi pour la création d'une classe "contexte", qui contiendrait des fonctions générales.

    Y'a t-il une solution préconisée en C++ pour ce genre de choses ?

    Merci !

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Personnellement, pour ça, je pense que j'utiliserais le pattern singleton.
    Voir par exemple :
    http://smeric.developpez.com/java/uml/singleton/

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je me posais donc la question de savoir quelle implémentation était la plus convenable.
    Utiliser un pointeur vers cet objet dans tous les objets créés me paraît lourd.
    J'ai aussi pensé à un objet statique, visible de tous.
    Si tu n'as rien de particulier comme traitements tu peux juste utiliser std::clog que tu auras redirigé là où tu veux qu'il écrive.
    Si tu as besoin d'un peu plus de contrôle, tu peux créer ta propre dérivée de std::streambuf, et si nécessaire ta dérivée de std::ostream.
    Quoiqu'il en soit, au bout du compte définir une variable globale marche très bien pour ça. C'est juste comme cout, cin, cerr et clog (j'anticipe les "beurk c'est sales les variables globales").

    La question se pose aussi pour la création d'une classe "contexte", qui contiendrait des fonctions générales.
    Si ce sont des fonction utilitaires, tu peux les placer en statique dans une classe, ou un espace nommé (mais la classe est un poil mieux).

  4. #4
    Membre éclairé Avatar de dockurt2k
    Inscrit en
    Juillet 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2006
    Messages : 91
    Par défaut
    Si ton application est purement graphique est n'utilise pas de console, tu peut aussi utiliser le flux de sortie standard( stdout sur lequel cout se dirige) en le redirigant sur un fichier. Ainsi tu pourra écrire tout ce que tu veut avec tes méthodes classiques (std::cout), ca attérira dans ton fichier.

    L'avantage sur l'utilisation de clog ou de variables statiques, si tu utilise des librairies que tu ne maitrise pas et qui affiche des messages d'erreurs sur la sortie standard, elle apparairont aussi !
    C'est le seul avantage je pense même mais dans certain cas (j'ai rencontré ca récemment) on pas trop le choix.

    La redirection :
    Sous systeme X, commande dup
    Sous windows je croit qu'il suffit de redirier stdout sur un pointeur de fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FILE *myfile=...
    *stdout = *myfile //oui pas les pointeurs, les pointées
    En tout cas sur windows je fait un truc à peu prés similaire pour rediriger le flux standard sur une nouvelle console.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pour rediriger un flux standard de manière standard, il suffit d'utiliser les fonctions rdbuf.

    Et en général, si une bibliothèque est bien faite, elle enverra ses erreurs sur std::err et non sur std::cout. En même temps rien n'empêche de rediriger les 3 sorties standard sur le même fichier, ou chacune dans un fichier.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    La question se pose aussi pour la création d'une classe "contexte", qui contiendrait des fonctions générales.
    Si c'est juste pour englober il vaut mieux utiliser un espace de nom.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Par défaut
    Houaouh ! Merci pour toutes ses réponses !
    Va falloir que je digère tout ça maintenant !

    Floyd_C

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

Discussions similaires

  1. [C#][DÉBUTANT]faire bouger un objet / utiliser un timer
    Par Rafsky dans le forum Windows Forms
    Réponses: 12
    Dernier message: 12/09/2006, 18h07

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