je ne comprends pas ce boost::bind
je regarde l'exemple serveur fonctionnant avec boost::asio :
http://www.boost.org/doc/libs/1_51_0...hat_server.cpp
il y a une ligne qui me pose problème :
Code:
1 2 3
| acceptor_.async_accept(new_session->socket(),
boost::bind(&chat_server::handle_accept, this, new_session,
boost::asio::placeholders::error)); |
la partie que je n'arrive pas à saisir est :
Code:
boost::bind(&chat_server::handle_accept, this, new_session, boost::asio::placeholders::error)
le premier argument &chat_server::handle_accept correspond à la fonction q'uon bind (dites moi si j'ai tort : mais il s'agit bien d'une référence ? donc il appelle la fonction non pas depuis un objet mais depuis la classe ?)
cette fonction est défini comme tel:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
void handle_accept(chat_session_ptr session,
const boost::system::error_code& error)
{
if (!error)
{
session->start();
}
start_accept();
} |
moi je ne vois que deux arguments, or dans le bind il y en a trois après &chat_server::handle_accept... pourriez vous m'expliquer ?
de plus ne connaissant pas bind j'ai regardé cette page :
http://www.boost.org/doc/libs/1_51_0...bind/bind.html
prenons l'exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11
| struct F
{
int operator()(int a, int b) { return a - b; }
bool operator()(long a, long b) { return a == b; }
};
F f;
int x = 104;
bind<int>(f, _1, _1)(x); |
je ne vois pas l'intérêt de faire :
Code:
bind<int>(f, _1, _1)(x);
au lie de
Code:
bind<int>(f, x, x)();
pourriez-vous aussi m'expliquer ?
de manière général je n'arrive pas à trouver d'exemple d'utilisation dans lequel je me dirais : « ha, ben là boost::bind va m'aider!! » auriez-vous en tête un exemple d'utilisation ?