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

Boost C++ Discussion :

Utilité de boost::bind ?


Sujet :

Boost C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Points : 785
    Points
    785
    Par défaut Utilité de boost::bind ?
    Bonjour à tous,

    N'ayant peut-être jamais eu l'occasion d'utiliser boost::bind, pourriez-vous me dire dans quel cas d'utilisation cette librairie me serait utile.

    J'ai beau comprendre son fonctionnement et surtout son utilité par rapport à la STL ( std::for_each, std::transform, ... ). Quels sont ces avantages et inconvénients ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    boost.bind (couplé à boost.function) permet de manipuler des fonctions au sens générique, càd que tu t'abstrais de savoir si ce sont des foncteurs, fonctions membres, libres, avec paramètres, sans paramètre, etc...
    Très utile par exemple lorsque tu dois mettre en place un système de callback ou d'évènements.

    En gros si je déclare une fonction ne renvoyant rien et prenant en paramètre un entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::function<void (int)> Func;
    A l'aide de boost.bind, je pourrai lui affecter n'importe quoi de compatible :
    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
    class A
    {
    public :
     
        static void F1(int);
        void F2(int);
        void F3(int, float);
    };
     
    void F4(int);
     
    A a;
    Func = boost::bind(&A::F1);
    Func = boost::bind(&A::F2, boost::ref(a), _1);
    Func = boost::bind(&A::F3, boost::ref(a), _1, 5.f);
    Func = boost::bind(&F4);
    (syntaxe peut-être pas 100% correcte, j'ai fait ça à l'arrache)

    Puis l'utiliser sans savoir ce qu'il y a derrière :

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Points : 785
    Points
    785
    Par défaut
    L'utilises-tu dans SFML ?

    Merci

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Non, car je veux éviter d'introduire une dépendance sur boost. C'est bien dommage d'ailleurs, car boost.function / boost.bind est exactement ce qu'il me faudrait.

  5. #5
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 105
    Points
    105
    Par défaut
    Sans inclure une dépendance à Boost, tu peut toujours en inclure une au TR1, que Boost implante, mais aussi très bientôt GCC.
    Avec ça, tu aurais une bibliothèque orientée vers l'avenir !

    Pour rester dans la discution (), Boost.Bind est inclue dans le TR1 !

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    TR1 est loin d'être implémenté sur tous les compilos actuels, et ne le sera jamais sur les vieilles version.

    Allez, fin de la petite parenthèse

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

Discussions similaires

  1. utilisation correct de boost:bind et result_of
    Par guillaume07 dans le forum Boost
    Réponses: 3
    Dernier message: 02/11/2009, 15h13
  2. boost::bind et membre de classe
    Par Trunks dans le forum Boost
    Réponses: 2
    Dernier message: 20/10/2009, 08h58
  3. Télécharger et installer boost::bind
    Par Electroniktor dans le forum Boost
    Réponses: 6
    Dernier message: 16/06/2008, 13h08
  4. for_each + boost::bind = crash ?
    Par Patriarch24 dans le forum C++
    Réponses: 8
    Dernier message: 21/09/2007, 09h47
  5. [Boost::bind] Cdecl / Callback
    Par superspag dans le forum Boost
    Réponses: 10
    Dernier message: 18/06/2007, 21h32

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