如何使用boost绑定使用Boost :: asio :: buffer(buf,size)?

时间:2011-11-04 23:10:47

标签: c++ boost boost-asio boost-bind

我们在某些.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 个答案:

答案 0 :(得分:1)

你必须告诉编译器你要绑定哪个 read_some。由于它是一个模板,因此您必须在将模板参数传递给bind()时指定模板参数。

在您的情况下,您需要http_request::read_some<boost::asio::mutable_buffers_1>

作为旁注,你也传递了socket对象本身错误。你传入一个指向套接字的指针,该函数需要一个引用。传入&socket,而不是传入bind传递boost::ref(socket),或者你可以使函数采用套接字指针而不是引用。