2010-12-13 5 views
2

L'augmentation asio deadline_timerasync_wait fonction prend gestionnaire de la forme:Boost Asio gestionnaire de async_wait

void handler(const boost::system::error_code& error) 

Comment pourrais-je définir un gestionnaire qui prend en const boost::system::error_code& error et aussi un argument de type int?

boost::asio::deadline_timer t(io_service); 

t.async_wait(handler); //I need the async_wait to take in handler which accepts argument boost::system::error_code& error and an int 

void handler(int, const boost::system::error_code& error)//extra int argument 

Merci.

Répondre

4

Vous pouvez utiliser Boost.Bind pour fournir une valeur pour le premier argument:

t.async_wait(boost::bind(handler, 0, _1)); 

Ici, le gestionnaire sera appelé avec 0 comme premier argument et le error_code sera simplement transmis comme deuxième argument.

+0

Merci pour votre réponse. Juste curieux, que signifie le symbole _1 dans ce contexte et où pourrais-je l'utiliser ailleurs? – Steveng

+0

@Steveng: C'est un espace réservé qui n'a de sens que dans le contexte d'un 'boost :: bind' qui fait référence au premier argument passé au foncteur retourné par ce' bind'. Le nombre d'arguments pris par le foncteur retourné par 'bind' est l'ordinal maximum des espaces réservés spécifiés: ici, le résultat de' bind' est un foncteur qui attend un seul argument qui est renvoyé comme deuxième argument de 'handler'. – icecrime

+0

@Steveng: en fait la documentation le dit beaucoup mieux que je fais "_1" est un argument de substitution qui signifie "substituer avec le premier argument d'entrée." – icecrime

Questions connexes