Boost Asio - boost::bind 导致程序崩溃

Boost Asio - boost::bind causes program to crash

本文关键字:程序 崩溃 bind boost Boost Asio      更新时间:2023-10-16

当我尝试使用 boost::bind 作为async_read_some函数调用的参数编译我的程序时,我遇到了问题。

如果我在下面使用此代码,我的程序在达到 async_read_some 时会崩溃。

socket_.async_read_some(boost::asio::buffer(message_, 1024),
            boost::bind(
                &Session::print_message, self, 
                boost::asio::placeholders::error, 
                boost::asio::placeholders::bytes_transferred)
        );

void print_message(boost::system::error_code& ec, std::size_t length)
{
}

但是如果我删除boost::bind并将其替换为 lambda 函数,它将正常工作。

    socket_.async_read_some(boost::asio::buffer(message_, 1024),
        [this, self](boost::system::error_code& ec, std::size_t length)
        {
            if (!ec)
            {
                std::cout << "made it" << std::endl;
            }
            std::cout << "Error: " << ec.message() << std::endl;
        }

这是我在编译时收到的错误

'R boost::_mfi::mf2<R,Session,boost::system::error_code &,size_t>::operator ()(T *,A1,A2) const': cannot convert argument 2 from 'Arg1' to 'A1' 

如果需要代码,请告诉我。

正如@rafix07所指出的,程序崩溃了,因为我没有为我的print_message处理程序输入正确的参数。

需要切换:

void print_message(boost::system::error_code& ec, std::size_t length)

void print_message(const boost::system::error_code& ec, std::size_t length)