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

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Points : 40
    Points
    40
    Par défaut Erreur de compilation : appel d'une méthode template dans une class template en métaprogrammation recursive
    Bonjour tout le monde,
    Je plonge dans l'univers de la méta-programmation récursive à l'aide de
    http://loulou.developpez.com/tutoriels/cpp/metaprog/ et surtout du livre Modern C++ Design: Generic Programming and Design Patterns Applied
    By Andrei Alexandrescu.

    J'ai un soucis quand j'appelle une méthode template statique d'une classe template. Voici le code simplifié (sans utilité) pour bien vous montrer le problème.
    Le header est :
    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
    template<int D>
    struct Int2Type
    {
        enum {value=D};
    };
    template<int Begin,int End>
    struct Toto;
     
    template<int N>
    struct Toto<N,N>
    {
        template<class T>
        static void titi()
        {
        };
    };
    template<int Begin,int End>
    struct Toto
    {
        template<class T>
        static void titi()
        {
            Toto<Begin+1,End>::titi<T>();
        };
    };
    et le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main()
    {
        Toto<0,3>::titi<Int2Type<0> >();
    }
    J'ai cette erreur de compilation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TypeListUseful.hpp:173: error: expected primary-expression before ‘>’ token
    sachant que la ligne 173 correspond à Toto<Begin+1,End>::titi<T>();
    Il me manque surement un mot clé (ce n'est pas typename puisque c'est une méthode que j'appelle). Mes tentatives de trouver une réponse avec mon ami google ont été infructueuses. j'en appelle donc à la communauté.
    Merci de votre aide.
    Vincent

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Toto<Begin+1,End>::template titi<T>();
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Merci Goten d'avoir répondu juste et rapidement.
    J'aurais deux questions :
    Savez-vous pourquoi? Avez-vous une référence à ce sujet?
    Merci

  4. #4
    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
    J'ai pas trop de temps pour expliciter longuement mais la réponse (courte) est dans la faq de comeau :
    http://www.comeaucomputing.com/techt...templateprefix
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Merci encore Goten

Discussions similaires

  1. arrayList dans une méthode recupérer dans une autre méthode
    Par toufik34 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 31/07/2013, 09h45
  2. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  3. Appeler une méthode définie dans une interface
    Par cedric.daniel dans le forum C#
    Réponses: 2
    Dernier message: 03/03/2009, 17h21
  4. erreur de compilation : probleme avec type de structure dans une classe
    Par medkarim dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/10/2008, 15h33
  5. [Applet] appel de la méthode stop() dans une applet
    Par ciol2.6.12 dans le forum Applets
    Réponses: 4
    Dernier message: 08/09/2005, 13h40

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