在其中一个Boost.Asio tutorial中,他们在构造函数中调用计时器上的异步等待。
Printer(boost::asio::io_service& io) : timer_(io, boost::posix_time::seconds(1)), count_(0) {
timer_.async_wait(boost::bind(&Printer::print, this));
}
print
是由
void print()
{
if (count_ < 5)
{
std::cout << count_ << std::endl;
++count_;
timer_.expires_at(timer_.expires_at() + boost::posix_time::seconds(1));
timer_.async_wait(boost::bind(&printer::print, this));
}
}
我不明白为什么此绑定到print
函数,因为print
函数没有接受任何参数(甚至不是错误)代码)
在代码示例中,这由证明是正确的。因为所有非静态类成员函数都有一个隐含的this参数,所以我们需要将它绑定到函数。
但我不理解需要将此绑定到该功能。
有人可以开导我吗?
答案 0 :(得分:5)
在对象上调用成员函数。这就是为什么存在隐式print(i)
参数的原因。如果没有该类的有效实例,则无法调用成员函数。
this
需要您传递调用该成员的对象。
答案 1 :(得分:1)
print
函数是类Printer
的非静态成员函数。与所有其他非静态成员函数一样,它接收一个隐式this
参数,允许它访问类实例字段(在这种情况下为timer_
和count_
)。可以通过提升时间调用的Functor仅限于没有参数,这就是bind
来提供operator ()
以便由计时器调用然后在内部调用Printer::print
的地方存储this
指针。