Как использовать Boost :: asio :: buffer (buf, size) с boost bind? - PullRequest
2 голосов
/ 05 ноября 2011

У нас есть функция-член в каком-то файле .h

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

И такой код мы хотим иметь в одной из функций нашего класса:

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

Это дает мне 87 ошибок компилятора и показывает, что boost :: bind не работает таким образом. Интересно, как передать boost::asio::buffer через boost::bind в мою функцию?

1 Ответ

1 голос
/ 06 ноября 2011

Вы должны указать компилятору , какой read_some вы хотите связать. Поскольку это шаблон, вы должны указать параметр шаблона при передаче его в bind().

В вашем случае вы хотите http_request::read_some<boost::asio::mutable_buffers_1>.

Как примечание, вы также неправильно передаете объект сокета. Вы передаете указатель на сокет, а функция получает ссылку. Вместо передачи &socket в bind, передайте boost::ref(socket), в качестве альтернативы вы можете заставить функцию принимать указатель на сокет вместо ссылки.

...