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

Langage C++ Discussion :

Boost & templates variadiques


Sujet :

Langage C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut Boost & templates variadiques
    Hello,

    Dans Boost.Accumulator, on peut apercevoir l'utilisation de templates variadiques.
    Or, je croyais que cette fonctionnalité n'était apportée que par C++11.

    Quelqu'un peut-il m'éclairer sur ce point ?

  2. #2
    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
    Bonjour,

    Oui c'est une fonctionnalité du C++2011, mais on sait l'émuler (pour l'utilisateur) :
    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
     
    struct null_type;
     
    template<class =null_type, class =null_type, class =null_type, class =null_type>
    struct Test;
     
    template<class T1>
    struct Test<T1>
    { /*code*/ };
     
    template<class T1, class T2>
    struct Test<T1,T2>
    { /*code*/ };
     
    template<class T1, class T2, class T3>
    struct Test<T1,T2,T3>
    { /*code*/ };
    Et en rajoutant de la méta-prog préprocesseur (boost::pp), on arrive à quelque chose de plus propre (les répétitions pour les spécialisations et le nombres maximum de paramètres sont générés par le préprocesseur) :
    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
     
    #include<boost/preprocessor/repetition/repeat.hpp>
    #include<boost/preprocessor/repetition/enum_params.hpp>
    #include<boost/preprocessor/repetition/enum_params_with_a_default.hpp>
     
    #define MAX_PARAM 10
     
    struct null_type;
     
    template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(MAX_PARAM, class T, null_type)>
    struct Test;
     
    #define VARIADIC_def(z,n,unused) \
      template<BOOST_PP_ENUM_PARAMS(n,class T)> \
      struct Test<BOOST_PP_ENUM_PARAMS(n,T)> \
      { };
     
    BOOST_PP_REPEAT(MAX_PARAM,VARIADIC_def,~)
    Je ne sais pas si c'est exactement comme ca que fonctionne boost::accumulator, mais c'est une solution viable il me semble.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Cf ici.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    OK, merci !

    Je suis encore intrigué par la syntaxe "...", mais il faudrait que je regarde le code Boost, qui n'est actuellement pas installé sur mon PC.

  5. #5
    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
    Les ... dans la liste des paramètre template dans la doc veulent juste dire qu'on peut mettre plus de paramètre, il ne font pas partie de la syntaxe du langage (pas sous cette forme du moins).

    Si tu ouvres le code de boost tu ne retrouveras pas ces ... dans la liste des paramètre template. Loufoque dans le lien donné par 3DArchi cite les deux méthodes pour simuler les variadics, le code que j'ai donné (le second) est une répétition horizontale.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par Flob90 Voir le message
    Les ... dans la liste des paramètre template dans la doc veulent juste dire qu'on peut mettre plus de paramètre, il ne font pas partie de la syntaxe du langage (pas sous cette forme du moins).
    OK, c'est ce que je subodorais.

    Citation Envoyé par Flob90 Voir le message
    Loufoque dans le lien donné par 3DArchi cite les deux méthodes pour simuler les variadics, le code que j'ai donné (le second) est une répétition horizontale.
    Il faudra que je me repenche sur ce fil quand j'aurai le temps et la possibilité de mettre le nez dans le code de Boost.
    D'ici là, je ne vais pas vous ennuyer plus longtemps.

    Merci à vous !

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

Discussions similaires

  1. [C++11] Templates variadiques et fonctions lambdas
    Par Steph_ng8 dans le forum Langage
    Réponses: 2
    Dernier message: 06/10/2011, 18h10
  2. Réponses: 2
    Dernier message: 17/10/2010, 15h11
  3. Réponses: 7
    Dernier message: 16/08/2010, 17h08
  4. Boost::tuples, Templates, Nombre de paramètre
    Par NoIdea dans le forum Débuter
    Réponses: 16
    Dernier message: 31/07/2010, 21h32
  5. utilisation correcte des template variadiques C++11
    Par mangobango dans le forum C++
    Réponses: 12
    Dernier message: 14/05/2010, 23h17

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