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 :

syntaxe queueDeclare(arg::queue=queue, arg::arguments=qo);


Sujet :

C++

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut syntaxe queueDeclare(arg::queue=queue, arg::arguments=qo);
    salut,

    dans le source du projet qpid (implementation du protocle amqp) je suis tombé sur des lignes avec la syntaxe suivante :

    session.queueDeclare(arg::queue=queue, arg::arguments=qo);


    D'où cela vient et comment ça marche, c'est du boost il me semble non ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 615
    Points : 30 628
    Points
    30 628
    Par défaut
    Salut,

    Ce n'est pas du boost, c'est "simplement" que la fonction a besoin de deux arguments pour lesquels une valeur par défaut a été définie.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    Mais la valeur par défaut au moment de la déclaration de la fonction je veux bien mais au moment de la définition et ou de l'utilisation ça ne compile pas normalement

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 11
    Points : 16
    Points
    16
    Par défaut
    Je suis moi aussi tombé sur ce genre de syntaxe et la réponse m'intéresse grandement aussi

  5. #5
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    je ne comprends pas la question...

    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    session.queueDeclare(arg::queue=queue, arg::arguments=qo);
    n'est-elle pas équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    arg::queue=queue;
    arg::arguments=qo;
    session.queueDeclare(arg::queue, arg::arguments);
    ?

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    je ne sias pas mais c'est pas du C++ valide d'aprés moi car

    arg::queue=queue;

    arg::queue est un type, queue une valeur mais il n'y pas de nom de variable
    dans l'initialisation

  7. #7
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    arg::queue est un type
    euh... tu l'as vérifié?
    Donne le fichier source, je suis curieux de le lire!

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    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
     
     
        BOOST_PARAMETER_MEMFUN(void, messageSubscribe, 0, 9, MessageSubscribeParameters) {
            return no_keyword::Session_0_10::messageSubscribe(
                p[arg::queue|string()],
                p[arg::destination|string()],
                p[arg::acceptMode|0],
                p[arg::acquireMode|0],
                p[arg::exclusive|false],
                p[arg::resumeId|string()],
                p[arg::resumeTtl|0],
                p[arg::arguments|FieldTable()],
                p[arg::sync|true]);
        }
     
       typedef boost::parameter::parameters<arg::keyword_tags::queue,arg::keyword_tags::exchange,arg::keyword_tags::bindingKey,arg::keyword_tags::arguments,arg::keyword_tags::sync> MessageSubscribeParameters;
    c'est une classe qui contient plein de définition de ce type

  9. #9
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    Trouve la définition de arg::queue et donne-la nous si tu ne la comprends pas.

  10. #10
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    arg est un namespace, queue de gauche est une string, queue de droite également, la méthode queueDeclare attends une string donc que veut dire la syntaxe :

    session.queueDeclare(arg::queue=queue);

  11. #11
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    je dirais qu'elle est équivaut à celle-ci :

    arg::queue = queue;
    session.queueDeclare(arg::queue);

  12. #12
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    l'operator = d'une string retourne une string

  13. #13
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    J'aurais plutôt parié sur le retour d'un string& mais je peux me tromper...

  14. #14
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Si arg::queue est bien un objet je dirais la même chose que Aleph69.

    Quand tu appeles une fonction, et que ses paramètres sont des fonctions (qui retourne le type attendue), disons
    Alors les fonctions qui servent de paramètre sont évalué (dans un ordre quelconque, soit bar en premier, soit goo) et ensuite la première fonction est executé avec les valeur retournées par les fonctions. Dans mon cas c'est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    type1 t1 = bar(); type2 t2 = goo(); //où l'inverse
    foo(t1, t2); //type1 et type2 les types des paramètre attendues par foo
    Dans ton cas, l'opérateur d'affectation d'une string retourne une référence sur lui-même (comme beaucoup d'opérateurs d'affectation), donc ton code est équivalent à ce que t'as donné Aleph69, AMA.

  15. #15
    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
    Non, c'est boost.parameter qui permet d'émuler les passages de paramètres nommé (fonction et template) .
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  16. #16
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    c'est un peu hors sujet mais dans l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    p[arg::queue|string()]
    l'opérateur | a-t-il une signification par défaut (que je ne connais pas, je ne l'utilise jamais) ou s'agit-il d'une surcharge?

  17. #17
    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
    Il est surchargé ici (boost.parameter toujours) et à un sens totalement différent : il est utilisé pour déclarer une valeur par défaut au paramètre. (ici une string vide)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  18. #18
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    ENORME boost::paramater

  19. #19
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    quels sont les avantages/inconvénients de boost::parameter par rapport à l'idiome de paramètre nommé classique?

  20. #20
    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
    La syntaxe, la possibilité d'avoir des paramètres optionnels, et des paramètres template nommé .
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/10/2008, 11h48
  2. Réponses: 6
    Dernier message: 14/01/2005, 10h36
  3. STL iterateur pour queue
    Par Mathieu.Nanoux dans le forum SL & STL
    Réponses: 2
    Dernier message: 05/11/2004, 00h35
  4. Réponses: 5
    Dernier message: 04/11/2004, 15h36
  5. Gérer les queue avec sql server ?
    Par devdev dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 17/06/2004, 17h38

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