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 :

Signature de boost::bimap


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Signature de boost::bimap
    Bonjour,

    J'ai récemment écrit la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <typename T>
    bool isStringInMapKeys( std::string const &s, std::map<std::string,T> const &m ) {
      /*
      Cette fonction renvoie true si s est l'une des clés de m. Sinon, elle renvoie false.
      */
     
      for ( typename std::map<std::string,T>::const_iterator it = m.begin() ; it != m.end() ; ++it ) {
        if ( it->first == s ) return true;
      }
     
      return false;
    }
    J'aimerais aussi pouvoir l'utiliser avec des boost::bimap<string, T>. J'ai lu dans la documentation de bimap :

    bm.left is signature-compatible with std::map<A,B>
    Pourtant, lorsque je crée un objet boost::bimap<string,int> myBimap (par exemple) et que j'essaye d'appeler la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isStringInMapKeys("test",myBimap.left);
    la compilation échoue en renvoyant le message suivant :

    error: no matching function for call to ‘isStringInMapKeys(const char [5], boost::bimaps::views::map_view<boost::bimaps::relation::member_at::right, boost::bimaps::detail::bimap_core<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, mpl_::na, mpl_::na, mpl_::na> >&)’
    Aurais-je mal compris ce qu'implique l'identité des signatures de bimap.left et de map ?

    Merci d'avance pour vos réponses !

  2. #2
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Les Signatures sont compatibles mais non identiques. Typiquement, tu veux faire ça plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template <typename T>
    bool isStringInMapKeys( std::string const &s, T const &m )

  3. #3
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    Ta fonction isStringInMapKeys() attend une map et non une bimap (quelles soient "compatibles" ne change rien).

    Grillé par poukill

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    En effet, c'est logique. J'avais limité le type du deuxième argument à map pour ne pas rendre la fonction "trop permissive" et signifier clairement que seuls les objets map et les instances de classes en dérivant pouvaient convenir.

    Comme une classe mère et ses filles sont équivalentes quand on les passe en argument dans une fonction réclamant une instance de la classe mère, je me disais que ça marcherait peut-être. Mais ça ne fonctionne pas sans doute parce que bimap.left n'hérite pas de map. C'est ça ?

  5. #5
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    Mais ça ne fonctionne pas sans doute parce que bimap.left n'hérite pas de map. C'est ça ?
    oui.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Merci pour ces explications. Je marque le sujet comme résolu.

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

Discussions similaires

  1. installation de boost
    Par heinquoi dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 18/04/2005, 17h20
  2. Privilèges des "Membres du club" : signature, pièces jointes illimitées, etc.
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 28/07/2004, 11h20
  3. afficher la signature des opérations dans XDE
    Par ChristopheH dans le forum Rational
    Réponses: 1
    Dernier message: 24/05/2004, 15h41
  4. cherchecomment utiliser boost sous linux
    Par Krost dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 25/02/2004, 22h03

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