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++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre habitu�
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 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 Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    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 exp�riment� 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
    Par d�faut
    Ta fonction isStringInMapKeys() attend une map et non une bimap (quelles soient "compatibles" ne change rien).

    Grill� par poukill

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 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 exp�riment� 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
    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
    Membre habitu�
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 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. afficher la signature des opérations dans XDE
    Par ChristopheH dans le forum Rational
    R�ponses: 1
    Dernier message: 24/05/2004, 15h41
  3. 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