gpt4 book ai didi

Boost::asio async_wait 处理程序签名

转载 作者:行者123 更新时间:2023-12-04 13:29:55 29 4
gpt4 key购买 nike

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

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

void print (this)



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

function signature of the handler must be:

void handler( const boost::system::error_code& error // Result of operation. );



Source: Boost documentation

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

谢谢。

最佳答案

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

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

boost::bind 返回一个函数对象,该对象引用了 this 引用的对象的类打印机的 print 方法。此函数对象由带有错误参数的 async_wait 方法调用(因为这是它所期望的签名)。但是错误参数被静默忽略,因为绑定(bind)没有引用它。

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

关于Boost::asio async_wait 处理程序签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778990/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com