
Envoyé par
gbdivers
Bonjour begre1929 et bienvenue sur le forum C++
merci!

Envoyé par
gbdivers
Un point important, bind est maintenant inclut dans la nouvelle norme du C++11. Si tu utilises un compilateur récent, tu n'as pas besoin de boost
j'avais effectivement vu des exemples qui utilisent std au lieu de boost. J'en ferai de même dans mes utilisations.

Envoyé par
gbdivers
Le principe de bind est en fait assez simple. Bind permet de créer un "fonction object", c'est à dire un objet qui encapsule l'appel d'une fonction.

Envoyé par
gbdivers
Tu ne vois pas les cas d'utilisation parce que tu te trompes sur ce que fait bind. Bind n'appelle pas une fonction, il créé un objet permettant d'appeler une fonction. Il est alors possible de passer cette fonction comme paramètre d'une autre fonction
Dans le premier exemple avec async_accept, le but n'est pas d'appeler chat_server::handle_accept tout de suite, mais de dire "async_accept devra appeler chat_server::handle_accept lors qu'elle est déclenché"
avec ta réponse et celle de Winjerome (concernant la FAQ), je vois maintenant bind comme un moyen de recréer une fonction membre en fonction libre, avec éventuellement un remaniement sur ses paramètres par utilisation des placeholders.
je ne voulais pas écrire :
boost::bind(this->chat_server::handle_accept, new_session, boost::asio::placeholders::error)
mais
boost::bind(this->handle_accept, new_session, boost::asio::placeholders::error)
copié+collé... même si là je devrais plutôt dire sélectionné+clique bouton milieu, mais c'est plus long à écrire...

Envoyé par
gbdivers
Plus généralement, bind pourra être utilisé lorsque l'on souhaite pouvoir modifier un comportement dynamiquement
je t'avouerai que bind ça me semble être plus une amélioration de la présentation du code, que d'un outil qui s'ajoute pouvant m'aider à résoudre des problèmes si c'est moi qui écris le code. Quoique avec bind je me demande si le function object n'est pas mieux géré au niveau de la mémoire, puisque créé et détruit que localement, est-ce ça ton propos sur la dynamique ?
ne maitrisant pas tout les outils que j'ai à ma disposition, si j'avais dû utiliser une fonction membre je l'aurais recopié dans un header que j'aurais inclue pour en faire une fonction libre (aux erreurs de copiés+collés près).
Par contre si je lisais du code à autrui, là bind, à prime abord, devrait m'aider à identifier un groupe de fonctions créées depuis une fonction membre (maintenant que bind et moi ne sommes plus des inconnus)
bon l'exemple,
boost::bind(&chat_server::handle_accept, this, new_session, boost::asio::placeholders::error)
montre quand même un intérêt lorsque la function est membre d'une classe écrite par un tiers. Ça j'avoue que c'est un avantage.
Si éventuellement je dis quelques chose qui n'a pas de sens me le dire... parce qu'il m'arrive d'hésiter, voir de renoncer, d'utiliser des termes propres à la programmation de peur de dire des bêtises...
Partager