Как использовать Boost::asio::buffer(buf, size) с привязкой boost?

У нас есть функция-член в каком-то файле .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 в мою функцию?


person Rella    schedule 04.11.2011    source источник
comment
какой тип переменной socket вы передаете в качестве третьего аргумента boost::bind()?   -  person Sam Miller    schedule 05.11.2011


Ответы (1)


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

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

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

person Arvid    schedule 06.11.2011