Boost :: asio async_wait处理程序签名

nav*_*tor 6 boost boost-asio

我正在浏览boost :: asio示例.我正在看 例4

令人困惑的是,此示例中的WaitHandler具有签名

void print(this)

但async_wait调用需要一个处理程序

处理程序的函数签名必须是:

void handler(const boost :: system :: error_code&error //操作结果.);

来源:Boost文档

由于参数类型是函数签名的一部分,为什么在上面的例子中,async_wait接受一个参数不是boost :: system :: error_code类型的处理程序?

谢谢.

Yuk*_*iko 12

正如您所正确观察的那样,async_wait方法接受一个处理函数,它接受一个参数(const boost :: system :: error_code&).但是在Timer.4示例中,对async_wait的调用是通过boost bind传递的,如下所示:

timer_.async_wait(boost::bind(&printer::print, this));
Run Code Online (Sandbox Code Playgroud)

升压::绑定返回一个函数对象,它指的是方法的打印打印机通过引用的对象.async_wait方法使用error参数调用此函数对象(因为这是它所期望的签名).但是默认忽略error参数,因为bind没有引用它.

官方的boost :: bind文档提供了有关boost :: bind的更多细节.另请参阅文章如何提升绑定库可以改进您的C++程序(可能有更多文章可用但我发现这个非常有用).