boost:asio:与boost :: bind的read_until问题

时间:2012-07-17 15:30:57

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

我遇到编译此代码错误的问题

/usr/include/boost/bind/bind_mf_cc.hpp:91:5:错误:初始化'boost :: _ bi :: bind_t的参数5,typename boost :: _ bi :: list_av_4 :: type> boost :: bind(R(T :: *)(B1,B2,B3),A1,A2,A3,A4)[R = void; T = tcpReader; B1 = const boost :: system :: error_code&amp ;; B2 = unsigned int; B3 = boost :: asio :: basic_streambuf<>&amp ;; A1 = tcpReader *; A2 = boost :: system :: error_code; A3 = unsigned int; A4 = boost :: asio :: basic_streambuf<&gt ;; typename boost :: _ bi :: list_av_4 :: type = boost :: _ bi :: list4,boost :: _ bi :: value,boost :: _ bi :: value,boost :: _ bi :: value> >]

void tcpReader::handle_read(const boost::system::error_code& ec, std::size_t bytes_transferred, boost::asio::streambuf& buf)
// inside a class method
boost::asio::streambuf buf;
boost::asio::async_read_until(*sock,buf,"\n" ,
                              boost::bind(&tcpReader::handle_read,this,error,buf.size(),buf)
                              );

关于问题是什么的任何想法?它我知道我错过了一些简单的东西,但我无法弄清楚是不是我必须使用boot :: buffer?

提前致谢

1 个答案:

答案 0 :(得分:1)

看起来,async_read_until()的所有重载都需要2个参数。您传递一个带有3个参数的函数。您可能希望将流作为额外参数传递,将其绑定到函数以获取具有2个参数的函数。

boost::bind( &tcpReader::handle_read, this, _1, _2, boost::ref( buf ) )

将你的成员函数“转换”为某个东西,需要2个参数。

()将您的缓冲区包装为引用,否则将进行复制。

亲切的问候 托