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

SL & STL C++ Discussion :

pair, vector, iterator et type_traits


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut pair, vector, iterator et type_traits
    Bonjour,

    j'ai un soucis un peu complexe (qui m'embrouille moi en tout cas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // J'ai ceci :
      std::pair<std::vector<int>, int>::first_type::iterator it;
     
    // Je veux cela :
    //  std::pair<std::vector<int> const &, int>::first_type::iterator it;
    // Voire cela :
    //  std::pair<std::vector<int> const *, int>::first_type::iterator it;
    Y a -t-il un traits dans la STL qui vire les qualifiers ?

    Merci

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    C'est fait dans loki, je vais m'en inspirer car je n'ai pas le feu vert pour l'utiliser dans mon projet.

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Pourquoi avoir mis typedef dans ton titre ?

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    C'est vrai, dans mon code y en a quelque uns mais je les ai enlevé dans le post pour plus de clareté.

    Bon, j'ai fait un truc comme ça :

    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
    #include <vector>
     
    template <typename T>
    class TypeTraits
    {
    private:
      template <class U> struct UnPointRef
      {
        typedef U Result;
      };
      template <class U> struct UnPointRef<U *>
      {
        typedef U Result;
      };
      template <class U> struct UnPointRef<U &>
      {
        typedef U Result;
      };
    public:
      typedef typename UnPointRef<T>::Result NonPointRef;
     
    };
     
    int main()
    { 
      typedef std::pair<std::vector<int> const &, int> truclong;
     
      TypeTraits<truclong::first_type>::NonPointRef::iterator it;
     
      return 0;
    }
    Mais impossible de compiler sous VC6... des idées sur comment faire ?

    main.cpp
    c:\program files\microsoft visual studio\vc98\include\utility(21) : warning C4181: qualifier applied to reference type ignored
    d:\projets visual\test en tous genres\main.cpp(42) : see reference to class template instantiation 'std::pair<class std::vector<int,class std::allocator<int> > const &,int>' being compiled
    c:\program files\microsoft visual studio\vc98\include\utility(21) : error C2529: '<Unknown>' : reference to reference is illegal
    d:\projets visual\test en tous genres\main.cpp(42) : see reference to class template instantiation 'std::pair<class std::vector<int,class std::allocator<int> > const &,int>' being compiled
    d:\projets visual\test en tous genres\main.cpp(42) : error C2510: 'NonPointRef' : left of '::' must be a class/struct/union
    d:\projets visual\test en tous genres\main.cpp(42) : error C2065: 'iterator' : undeclared identifier
    d:\projets visual\test en tous genres\main.cpp(42) : error C2146: syntax error : missing ';' before identifier 'it'
    d:\projets visual\test en tous genres\main.cpp(42) : error C2065: 'it' : undeclared identifier

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je pense que tu dois rajouter une spécialisation de template pour UnPointRef<U const &>
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    J'ai exactement les mêmes erreur avec ce code là :

    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
    template <typename T>
    class TypeTraits
    {
    private:
      template <class U> struct UnPointRef
      {
        typedef U Result;
      };
      template <class U> struct UnPointRef<U *>
      {
        typedef U Result;
      };
      template <class U> struct UnPointRef<U const *>
      {
        typedef U Result;
      };
      template <class U> struct UnPointRef<U &>
      {
        typedef U Result;
      };
      template <class U> struct UnPointRef<U const &>
      {
        typedef U Result;
      };
    public:
      typedef typename UnPointRef<T>::Result NonPointRef;
     
    };
    Par contre si je prends un pointeur à la place (ce qui pourrait m'aller) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main()
    { 
      typedef std::pair<std::vector<int> const *, int> truclong;
     
      TypeTraits<truclong::first_type>::NonPointRef::iterator it;
     
      return 0;
    }
    Je n'ai plus que ces erreurs là :

    main.cpp
    d:\projets visual\test en tous genres\main.cpp(40) : error C2510: 'NonPointRef' : left of '::' must be a class/struct/union
    d:\projets visual\test en tous genres\main.cpp(40) : error C2065: 'iterator' : undeclared identifier
    d:\projets visual\test en tous genres\main.cpp(40) : error C2146: syntax error : missing ';' before identifier 'it'
    d:\projets visual\test en tous genres\main.cpp(40) : error C2065: 'it' : undeclared identifier

Discussions similaires

  1. Perf de parcours vector : iterator vs index
    Par codnob dans le forum SL & STL
    Réponses: 20
    Dernier message: 28/01/2010, 14h23
  2. vector : iterator.. besoins d'une petite précision
    Par italiasky dans le forum SL & STL
    Réponses: 2
    Dernier message: 18/11/2008, 10h37
  3. Réponses: 10
    Dernier message: 30/06/2008, 19h59
  4. Réponses: 2
    Dernier message: 07/12/2007, 02h19
  5. Template - vector - iterator
    Par jmeuf dans le forum Langage
    Réponses: 6
    Dernier message: 30/03/2007, 13h42

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