使用'这个'在类定义中

时间:2017-11-07 13:30:22

标签: c++ boost-asio

在其中一个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参数,所以我们需要将它绑定到函数。

但我不理解需要绑定到该功能。

有人可以开导我吗?

2 个答案:

答案 0 :(得分:5)

在对象上调用成员函数。这就是为什么存在隐式print(i)参数的原因。如果没有该类的有效实例,则无法调用成员函数。

出于这个原因,

this需要您传递调用该​​成员的对象。

答案 1 :(得分:1)

print函数是类Printer的非静态成员函数。与所有其他非静态成员函数一样,它接收一个隐式this参数,允许它访问类实例字段(在这种情况下为timer_count_)。可以通过提升时间调用的Functor仅限于没有参数,这就是bind来提供operator ()以便由计时器调用然后在内部调用Printer::print的地方存储this指针。