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 :

imbrication de templates


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut imbrication de templates
    Bonsoir à tous , j'ai un problème lors de la compilation du code suivant:
    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
    27
    28
    29
    30
    31
    32
    33
     
    #include <vector>
    #include <iostream>
    #include <boost/range.hpp>
     
    using namespace boost;
     
    struct test
    {
    	/** Le type liste générique du test */
    		template<typename T> struct liste { typedef std::vector<T> type; };
    	/** Le type plage générique du test */
    		template<typename T> struct plage
    		{
    			typedef boost::iterator_range<typename liste<T>::iterator>> type;
    		};
     
    	liste<double>::type listeTest;
    		/**< La liste du test */
     
    	plage<double>::type f()
    	{
    		return listeTest;
    	}
    };
     
    int main(void)
    {
    	test t;
    	t.listeTest.push_back(0);
    	std::cout << t.f().front() << std::endl;
    	return 0;
    }
    mon compilateur (visual 2008) me dit:
    1>d:\programmation\testcontrat\testcontrat\main.cpp(15) : error C2059: erreur de syntaxe*: '>'
    1> d:\programmation\testcontrat\testcontrat\main.cpp(16)*: voir la référence à l'instanciation de la classe modèle 'test::plage<T>' en cours de compilation
    j'espérai qu'il me remplace sans se plaindre le liste<T>::type par std::vector<T*> et lors de l'instantiation finale le plage<double>::type par boost::iterator_range<std::vector<double>::iterator>>. J'avoue que là je vois pas trop pourquoi il ne s'y retrouve pas (bien que je conçoive que ce que je demande est un peu tordu ). Si quelqu'un voit pourquoi ça ne compile pas
    Merci d'avoir pris le temps de me lire

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Faudrait pas remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef boost::iterator_range<typename liste<T>::iterator>> type;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef boost::iterator_range<typename liste<T>::type::iterator>> type;
    ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut
    Effectivement... quel œil attentif Malheureusement, ce n'est pas l'origine de mon problème (c'était juste une erreur de copier/coller )

  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
    voir mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          typedef boost::iterator_range<typename liste<T>::type::iterator> type;

    (y'a un > de trop)

    Par ailleurs deux >> ça compilera pas. (le compilo sait pas si c'est deux brackets fermant ou l'opérateur).
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut
    Merci!! Effectivement, c'était ça! Bon je crois que je vais arrêter de bosser pour ce soir (désolé de ne pas avoir vu tout de suite l'erreur du > de trop ) En tout cas merci encore pour votre réactivité et votre perspicacité!

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

Discussions similaires

  1. imbrication template variadic
    Par Lintel-oo dans le forum Langage
    Réponses: 0
    Dernier message: 30/10/2012, 11h31
  2. imbrication de templates
    Par Joccd dans le forum C#
    Réponses: 3
    Dernier message: 15/09/2012, 19h46
  3. Fonction template recursive, avec imbrication de types
    Par YéTeeh dans le forum Langage
    Réponses: 5
    Dernier message: 28/04/2006, 17h02
  4. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/03/2003, 10h52
  5. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/09/2002, 11h31

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