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 :

Utiliser une méthode d'une instance, dans une callback


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 69
    Points
    69
    Par défaut Utiliser une méthode d'une instance, dans une callback
    Bonjour

    Plutôt que de tenter de décrire mon problème, je prends un exemple, cela sera sûrement plus simple !

    J'utilise le framework Qt.

    Je cherche à trier une QList. J'utilise la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qSort(list.begin(), list.end(), sortFunction);
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     bool sortFunction(const LeType &s1, const LeType &s2);
    Jusque là, c'est ok ; Maintenant, je désire trier cette liste en utilisant un membre d'une instance dans la fonction de tri.
    Je ne trouve pas la bonne méthode / syntaxe.

    Ecrit en code qui ne compile pas, cela serait quelque chose 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
     
    // en préambule, nous avons implémenté sur QString, un opérateur "-" qui renvoie la 
    // distance entre les deux opérandes.
     
     
    class MaClasse(){
    public:
      void trierSurDistance(){
         qsort(list.begin(), list.end(), this->sortFunction);
      }
    private:
       bool sortFunction(const QString& s1, const QString& s2){
           return s1-reference < s2-reference;
       }
       QString reference;
    }
    Quelle est la solution élégante pour faire cela ?

    Merci
    Henri

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Avec la STL ou boost tu as le choix entre std::bind et une lambda, avec Qt ça à l'air d'être pareil. Mais la doc est pas très parlante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    qsort(list.begin(), list.end(), [this](const QString& s1, const QString& s2) -> bool { return sortFunction });
    qsort(list.begin(), list.end(), qbind(MaClasse::sortFunction , this, placeholders::_1, placeholders::_2));

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    Bonjour,
    La méthode simple et classique si on n'a pas accès à C++11 :

    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
     
    class MonComparateurPerso
    {
    private:
       QString _reference;
    public:
       MonComparateurPerso(QString reference)
          : _reference(reference)
       {
       }
     
       bool operator()(const QString& s1, const QString& s2) const
       {
          return s1 - _reference < s2 - _reference;
       }
    };
     
    qSort(list.begin(), list.end(), MonComparateurPerso(reference));

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 69
    Points
    69
    Par défaut
    Bonjour

    Merci pour vos réponses, les deux se complètent.

    Je n'ai pas réussi à utiliser la lambda avec le qSort de Qt mais avec
    qq lignes de plus et la surcharge de (), ca le fait bien.

    Merci
    Henri

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

Discussions similaires

  1. Comment utiliser des méthodes d'un jar dans une JSP ?
    Par utopman dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 26/06/2012, 23h01
  2. Réponses: 3
    Dernier message: 09/10/2010, 19h09
  3. Réponses: 1
    Dernier message: 16/05/2007, 13h51
  4. [MySQL] récupérer dans une boucle chaque information MySQL dans une variable différente
    Par gtenthorey dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2007, 23h34
  5. Réponses: 2
    Dernier message: 20/06/2006, 09h22

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