2011-11-04 5 views
2

Nous avons une fonction de membre dans certains .hComment utiliser Boost :: asio :: buffer (buf, taille) avec boost bind?

template <typename MutableBufferSequence> 
int read_some(boost::asio::ip::tcp::socket& sock, 
    const MutableBufferSequence& buffers) 
{ 
    return sock.read_some(buffers); 
} 

Et ce code que nous voulons avoir dans l'une de nos fonctions de classe:

boost::packaged_task<int> pt(boost::bind(&http_request::read_some, this, &socket, boost::asio::buffer(buffer, buffer_size))); 

Cela me donne 87 erreurs du compilateur et me Talls que boost :: bind ne fonctionne pas de cette façon. Je me demande comment passer boost::asio::buffer via boost::bind à ma fonction?

+0

Quel est le type de la variable 'socket' que vous transmettez en tant que troisième argument de' boost :: bind() '? –

Répondre

1

Vous devez dire au compilateur read_some que vous voulez lier. Comme il s'agit d'un modèle, vous devez spécifier le paramètre template lorsque vous le transmettez à bind().

Dans votre cas, vous voulez http_request::read_some<boost::asio::mutable_buffers_1>.

En note, vous passez également dans l'objet socket lui-même faux. Vous passez dans un pointeur vers le socket, et la fonction prend une référence. Au lieu de passer en &socket à bind, passez en boost::ref(socket), vous pouvez également faire en sorte que la fonction prenne un pointeur de socket au lieu de référence.