2009-11-22 87 views
6

我正在通过boost :: asio示例。我在看 Example 4Boost :: asio async_wait处理程序签名

什么是令人困惑的是,在WaitHandler在这个例子中有签名

无效打印(本)

但async_wait调用需要的处理程序,其

处理程序的功能签名必须是:

void handler( const boost :: system :: error_code &错误//操作结果。 );

Source: Boost documentation

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

THanks。

回答

11

正如您所看到的,async_wait方法接受一个处理函数,它接受一个参数(const boost :: system :: error_code &)。但在Timer.4例如,要async_wait呼叫被经由升压绑定如下传递:

timer_.async_wait(boost::bind(&printer::print, this)); 

升压::绑定返回一个函数对象,它指的是方法打印类打印机为对象由引用。该函数对象由带有error参数的async_wait方法调用(因为这是它期望的签名)。但是,错误参数默默无视,因为它没有被绑定引用。

官方boost::bind documentation提供了有关boost :: bind的更多细节。另见文章How the Boost Bind Library Can Improve Your C++ Programs(可能有更多的文章,但我发现这个非常有用)。

2

您可以使用占位符在调用async_wait中指定回调函数使用哪些参数。检查链接页面上的async_wait调用上方的句子:

您将注意到boost :: asio :: placeholders :: error占位符未在此指定,因为打印成员函数不接受错误对象作为参数。

this example中搜索“占位符”,您将看到如何操作。

相关问题