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 :

Envoie d'un couple <variable>,<valeur> à plusieu


Sujet :

C++

  1. #1
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut Envoie d'un couple <variable>,<valeur> à plusieu
    Bonjour,
    J'ai un petit soucis en ce qui concerne l'envoie de paramètre.
    Je réalise un petit programme qui possède un fichier de configuration.
    Je récupère bien tous les champs selon la forme (<variable>,<valeur>) par une fonction mais j'ai un petit soucis pour les envoyer à mes différentes classes.
    En effet, j'ai 5 - 6 classes (1 qui me sert de main principal et les autres sans héritage) pour le moment (avec leurs accesseurs), mais il faudrait que j'envoie le premier couple (var - valeur) à ma premiere classe par exemple, le second à ma troisieme classe, le troisieme couple à ma 4eme classe ainsi de suite.
    J'ai pensé à retourner ma valeur précédée d'un indice (0200 où 0=premier parametre et 200 la valeur) mais je ne trouve pas çà très propre.

    Merci d'avance

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Ce n'est pas très clair tout ça
    Pourrais-tu donner plus de précision?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Je vais essayer d'eclaircir la chose:
    • - j'ai une classe qui me sert de "main" pour me generer et gerer mes autres classes qui sont independantes
      - 5 - 6 classes independantes (class A, B, ... par exemple) avec des attributs privés et leurs accesseurs respectifs (attribut int nombre et accesseur Setnombre(int) et Getnombre par exemple)
      - une derniere classe Fichier (contenue dans fic.cpp) qui me sert pour lire le fichier de configuration (conf.txt par exemple)

    Fic.cpp lit ce fichier ligne par ligne, enleve les commentaires (merci à votre FAQ) et me donne, dans un premier temps la variable, et dans un second temp la valeur associée. J'ai mis la variable dans un string temporaire et appelle une seconde fonction qui a en parametre var et valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Fichier::Trait_Mot(string var,string val)
    Comme il y a plusieurs paramètres à lire (en gros, 4 pour chacune de mes classes évoquées en seconde position plus haut), cette fonction est appelée 4(nb_parametre)*5(nb_classe) fois car ces parametres sont les attributs de ces classes.
    J'aimerais donc que, selon la variable, cette fonction Trait_mot mette à jour mes attributs de mes classes (surement en passant par mes accesseurs) mais je ne sais pas comment faire pour appeler mes accesseurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(var=="attribut_de_A")
      A.Setnombre=valeur ??
    Du coup, je pensais passer par un tableau à 2 colonnes intermediaires qui serait retourner par ma fonction Trait_mot, mais celà surchargerait la mémoire ??

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Salut,

    J'avoue que je suis un peu perdu dans ce que tu veux faire! Qu'est que tu veux dire par "J'ai une classe qui me sert de "main". main est une fonction et non pas une classe, non?

    Si tu nous donnes un peu plus de code ou avec un schéma, ça pourrait nous aider. Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Effectivement, c'est pas facile de comprendre, mais je sais pas trop comment expliquer.
    Je vais essayer de faire une représentation chronologique:
    1. une classe General où j'ai un unique main qui me permet d'instancier toutes les classes
    2. une classe Fichier m'ouvre un fichier de configuration
    3. plusieurs classes (Document, Bloc, ...) ayant un attribut taille par exemple et les 2 accesseurs GetTaille et SetTaille

    Donc, dans mon main de ma classe General, j'ai par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fichier Fic;
    Document D;
    Bloc B;
    Dans ce fichier de configuration, j'ai la taille de document et de bloc par exemple; donc j'aimerais que dans ma classe Fichier, une methode me sert à changer les attributs tailles des 2 classes (Document et Bloc par exemple), ce qui "reviendrait" à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void Fichier::Trait_Mot(string var,string val)
    if(var=="taille_Doc")
      D.SetTaille=valeur;
    J'ai bien pensé à passer en parametre la classe (enfin le pointeur), mais j'ai 6 classes minimum :-(
    A l'heure actuelle, à part de passer par un tableau (var,valeur) intermédiaire, je ne sais pas comment faire.

  6. #6
    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
    En général, je définis une classe pour la gestion des arguments du programme et autres aspects de configuration (va boost.program_option quand je le peux -- contraintes projet ...).

    Et ensuite, soit je construis, en cascade, les éléments clés de mon appli avec ces options, soit je défini un singleton qui contiendra les options pour tous les autres objets de l'application.

    Dans la mesure du possible, je privilégie la première approche.
    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...

  7. #7
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par Luc Hermitte
    En général, je définis une classe pour la gestion des arguments du programme et autres aspects de configuration (va boost.program_option quand je le peux -- contraintes projet ...).
    C'est possible un exemple pour comprendre parce que là, je vois pas du tout

  8. #8
    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
    Le main() type devrait suffire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char**argv) {
        Parameters p(argc, argv);
     
        Logger l(p);
        TotoManager tom(l,p);
        TitiManager tim(l,p);
        Application a(l, tom, tim, p);
     
        return a.run();
    }
    Après, tout dépendra de chaque application pour ce qui est des dépendances entre les divers objets clés -- on peut tout à fait déplacer les managers pour en faire des membres de l'objet application. C'est un détail. Parfois pénible à régler si on décide p.ex. que le logger ainsi que tel ou tel autre manager est un singleton, ...

    Quant à la classe parameter, elle propose un accesseur (globalement en RO) sur toutes les options du programme. On peut tout à fait la découper en deux classes : une pour toutes les options et une qui décrit les associations entre options et paramètres (argv) ou ficher de conf.

    On peut répartir à l'infini. Je n'ai pas de recette définitive et clé en main.

    NB: si tel ou tel manager (ici) n'a besoin que d'un ou deux arguments, pour être construit plutôt que de passer p, on peut passer très uniquement ce qui est nécessaire.
    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: 7
    Dernier message: 27/02/2014, 13h31
  2. [MySQL] Php-Mysql : insérer un couple de variables issu d'un checkbox
    Par seb38l dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 25/04/2012, 06h43
  3. Envoi de mails en vb + variables
    Par Débutant69001 dans le forum VBScript
    Réponses: 4
    Dernier message: 29/05/2010, 17h07
  4. [Mail] Envoi d'un mail sans variable $_POST ?
    Par Jeystrash dans le forum Langage
    Réponses: 4
    Dernier message: 24/09/2007, 18h28

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