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 :

bind2nd, ptr_fun et types des parametres


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 57
    Par défaut bind2nd, ptr_fun et types des parametres
    Re-salut.

    Sur le bout de code suivant, j'ai une erreur de compilation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    bool EqualsInsensitive(const string& s1, const string& s2){
       string one= LowerCase(s1); // Utilise tolower mais si vous avez mieux, je prends
       string two= LowerCase(s2);
     
       return (one==two);
    }
    ....
    string s("toto");
    bool isInside = (find_if(sv.begin(), sv.end(), 
                                    bind2nd(ptr_fun(EqualsInsensitive), s)) 
                            != sv.end()); // sv est un vecteur de strings.
    qui part quand je mets les parametres d'EqualsInsensitive en non-const ref.

    Que faut-il faire pour garder les parametres de cette fonction plutot en const ref ?

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    Bonjour,

    j'ai l'impression que cela n'est pas possible, la chose veut que les paramètres de la fonction soient exactement du type des éléments du vecteur et de 's'. N'oubliez pas que const est un modificateur, il ne fait pas 'parti' du type
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 57
    Par défaut
    Citation Envoyé par bruno_pages Voir le message
    Bonjour,

    j'ai l'impression que cela n'est pas possible, la chose veut que les paramètres de la fonction soient exactement du type des éléments du vecteur et de 's'. N'oubliez pas que const est un modificateur, il ne fait pas 'parti' du type
    Tu as raison sur ce point. Mais c'est con de perdre le caractere const alors que de l'autre cote, on a une semantique de valeur mais aussi copie ce qui peut etre penalisant.

    Intellectuellement ce n'est pas tres satisfaisant de devoir rechanger la signature d'une fonction (ou de la wrapper avec un autre nom vu qu'on ne peut pas surcharger sur const ref) pour pouvoir beneficier des services de la STL.

    Sinon, j'ai passe du temps a regarder la comparaison de chaines sans tenir compte de la casse, mais ca reste problematique. Soit il faut surcharger manuellement toupper/tolower si on garde la solution conversion soit il faut passer par une string speciale en passant par char_trait mais je n'ai pas encore creuse comment ca se passe.

  4. #4
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Oui la solution c'est de faire sa propre string case-insensitive via char_Trait. Je crois que y'a un gotw qui traite de ça.

    J'ai pas le temps de rechercher dans tout les adaptateurs de la STL. Mais sinon y'a toujours la possibilité d'utiliser boost::bind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find_if(sv.begin(), sv.end(), boost::bind(EqualsInsensitive, _1, s)

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    mélanger stl et boost me parait être une véritable hérésie, non ?
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par bruno_pages Voir le message
    mélanger stl et boost me parait être une véritable hérésie, non ?
    Euh, en vertu de quoi ?

    Au contraire j'ai envie de dire, ca se marie très bien
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  7. #7
    Alp
    Alp est déconnecté
    Expert confirmé

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par bruno_pages Voir le message
    mélanger stl et boost me parait être une véritable hérésie, non ?
    Boost est justement une extension de la S(T)L, ça la complète. La compatibilité est d'ailleurs excellente, et justement, c'est fait pour !

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

Discussions similaires

  1. [FLASH MX2004] Lecture des parametres de l'url
    Par matN59 dans le forum Flash
    Réponses: 5
    Dernier message: 23/06/2006, 13h30
  2. [script SQL]comment passer des parametres a un scrip sql?
    Par la7su dans le forum Langage SQL
    Réponses: 5
    Dernier message: 23/03/2005, 10h55
  3. [tranformation du type des colonnes]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 18/03/2005, 09h46
  4. sql ne comprend pas mon where!et me demande des parametres
    Par marie10 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/04/2004, 11h08
  5. Interbase 6 et le type des images?
    Par AnestheziE dans le forum InterBase
    Réponses: 6
    Dernier message: 30/10/2003, 10h48

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