2011-11-04 51 views
2

我们有一些.h文件中如何使用Boost :: asio :: buffer(buf,size)和boost绑定?

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个的编译器错误和talls我, boost :: bind不能以这种方式工作。我想知道如何通过boost::bindboost::asio::buffer传递给我的函数?

+0

作为'boost :: bind()'的第三个参数传递的''socket变量的类型是什么? –

回答

1

你必须告诉编译器你想要绑定哪个read_some。由于它是一个模板,所以当您将它传递到bind()时,您必须指定模板参数。

在你的情况下,你想要http_request::read_some<boost::asio::mutable_buffers_1>

作为一个方面说明,你也传递了套接字对象本身的错误。你正在传递一个指向套接字的指针,并且该函数需要一个引用。而不是通过&socketbind,传入boost::ref(socket),或者你可以让函数采用套接字指针而不是引用。