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 :

Que veut dire cette ligne ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut Que veut dire cette ligne ?
    Bonjour,

    Je débute en C++ mais je connais bien le C.

    Que fait cette ligne exactement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static foo::expose::json::NamespaceNode ns_config(&ns_port, "config");
    ce que j'ai compris, c'est que ça déclare en local dans le fichier .cxx : la fonction ns_config dans le spacename "foo::expose::json::NamespaceNode"
    ... ce que je ne comprends pas, c'est qu'il y a dans ce prototype des arguments, ça ne devrait pas être plutôt ça qu'il devrait y avoir ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static foo::expose::json::NamespaceNode ns_config(ns_port_t * ns_port, char * str);

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    La ligne ne déclare pas une fonction mais définit une instance d'objet statique. Les deux paramètres sont des valeurs passées au constructeur de foo::expose::json::NamespaceNode.
    Et, tu as raison si c'était une déclaration de fonction, les paramètres seraient alors des types ou des paramètres typés.

    On aurait pu aussi l'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static auto ns_config = foo::expose::json::NamespaceNode(&ns_port, "config");
    Qui est plus compréhensible quand on vient du C.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    ok, merci pour l'info
    ... et effectivement la second écriture est beaucoup plus compréhensible, je ne vois pas trop l’intérêt de la première !

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    Bonjour,

    J'ai aussi une interrogation sur cette déclaration de structure, je ne comprends pas exactement ce que ça fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct Foo {
        typedef bla::expose::ParamList <
        bla::expose::ParamVal<bla_infos_t *>
        > P;
     
        //...
    };
    ... ça fait quoi exactement les opérateurs < et > ?


    Merci d'avance


    Pour infos, déclaration du template ParamList :
    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
     
     
    namespace bla {
    namespace expose {
     
    	// ...
     
    	template <typename... T>
    	struct ParamList {
    		typedef int (*get_t)(typename T::get_ptr_type...);
    		typedef int (*set_t)(typename T::set_ptr_type...);
    		typedef int (*add_t)(typename T::set_ptr_type...);
    		typedef int (*def_t)(typename T::ptr_type...);
    		typedef typename details::DelPtrTypeCalc<T...>::type del_t;
    		typedef typename details::ItrPtrTypeCalc<T...>::type itr_t;
    		typedef int (*json_get_all_t)(const bla::expose::json::Request *req,
    										  bla::ostreamBuf *os);
     
    		typedef typename details::KeyTypeList<T...>::type key_list;
    		typedef typename details::ValTypeList<T...>::type val_list;
    		static constexpr size_t key_cnt = details::KeyTypeList<T...>::size;
    		static constexpr size_t val_cnt = details::ValTypeList<T...>::size;
    	};
     
    }  // namespace expose
    }  // namespace bla
    Pour information, j'ai quelques connaissances en langages orientés objets (java, vba, ...)

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Citation Envoyé par boboss123 Voir le message
    ... ça fait quoi exactement les opérateurs < et > ?
    Le C++ n'est pas le C. Avant de passer il te faut peut-être apprendre le langage.
    < et > dans l'exemple que tu donnes ne sont pas des opérateurs, ils permettent ici de fournir des paramètres de template. La métaprogrammation est un des paradigmes fondamentaux du C++.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    J'ai lu quelques tutos sur les templates mais je n'ai pas trouvé d'explication de ce qu'était les points de suspension dans "<typename... T>" (tous les exemples que j'ai vus n'en avaient pas).
    De plus, je n'ai pas trouvé d'explication sur la signification de "> P"

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

Discussions similaires

  1. Que veut dire cette ligne ?
    Par dsant dans le forum C
    Réponses: 4
    Dernier message: 26/04/2012, 16h23
  2. Que veut dire cette erreur ?
    Par Invité dans le forum jQuery
    Réponses: 3
    Dernier message: 04/04/2011, 09h51
  3. Que veut dire cette syntaxe: (key == 13) && ente && ente();
    Par geekforever dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/10/2010, 21h32
  4. Que veut dire cette erreur (au runtime) ?
    Par corseb-delete dans le forum Général Java
    Réponses: 6
    Dernier message: 08/04/2008, 12h29

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