我正在浏览boost :: asio示例.我正在看 例4
令人困惑的是,此示例中的WaitHandler具有签名
void print(this)
但async_wait调用需要一个处理程序
处理程序的函数签名必须是:
void handler(const boost :: system :: error_code&error //操作结果.);
由于参数类型是函数签名的一部分,为什么在上面的例子中,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++程序(可能有更多文章可用但我发现这个非常有用).
| 归档时间: |
|
| 查看次数: |
5984 次 |
| 最近记录: |