Boost 如何获取错误对象?在截止时间计时器中使用成员函数时

Boost 如何获取错误对象?在截止时间计时器中使用成员函数时,boost,timer,boost-asio,Boost,Timer,Boost Asio,我使用boost::asio::deadline\u计时器,使用成员函数作为处理程序(回调函数) 如果取消计时器,如何在print()成员函数中获取错误对象 class printer { public: printer(boost::asio::io_service& io) : timer_(io, boost::posix_time::seconds(1)), count_(0) { timer_.async_wa

我使用boost::asio::deadline\u计时器,使用成员函数作为处理程序(回调函数)

如果取消计时器,如何在print()成员函数中获取错误对象

class printer
{
public:
    printer(boost::asio::io_service& io)
        : timer_(io, boost::posix_time::seconds(1)),
          count_(0)
    {
        timer_.async_wait(boost::bind(&printer::print, this));
    }
    ~printer()
    {
        std::cout << "Final count is " << count_ << "\n";
    }
    void print()
    {
        if (count_ < 5)
        {
            std::cout << count_ << "\n";
            ++count_;

            timer_.expires_at(timer_.expires_at() + boost::posix_time::seconds(1));
            timer_.async_wait(boost::bind(&printer::print, this));
        }
    }

private:
    boost::asio::deadline_timer timer_;
    int count_;
};

int main()
{
    boost::asio::io_service io;
    printer p(io);
    io.run();

    return 0;
}

只要方法签名匹配,就应该没有问题:

void print(boost::system::error_code const ec)

// and

boost::bind(&printer::print, this, boost::asio::placeholders::error)
看到它了吗

#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <iostream>

class printer
{
public:
    printer(boost::asio::io_service& io)
        : timer_(io, boost::posix_time::seconds(1)),
          count_(0)
    {
        timer_.async_wait(boost::bind(&printer::print, this, boost::asio::placeholders::error));
    }
    ~printer()
    {
        std::cout << "Final count is " << count_ << "\n";
    }

    void print(boost::system::error_code const ec)
    {
        if (ec)
            std::cout << "Error: " << ec.message() << "\n";
        if (count_ < 5)
        {
            std::cout << count_ << "\n";
            ++count_;

            timer_.expires_at(timer_.expires_at() + boost::posix_time::seconds(1));
            timer_.async_wait(boost::bind(&printer::print, this, boost::asio::placeholders::error));
        }
    }

private:
    boost::asio::deadline_timer timer_;
    int count_;
};

int main()
{
    boost::asio::io_service io;
    printer p(io);
    io.run();
}
#包括
#包括
#包括
类打印机
{
公众:
打印机(boost::asio::io\U服务和io)
:timer_(io,boost::posix_time::seconds(1)),
计数(0)
{
计时器异步等待(boost::bind(&printer::print,this,boost::asio::placeholders::error));
}
~printer()
{

std::cout您没有提供编译器错误消息。这很奇怪,因为您对此有疑问。@sehe谢谢:)我写了一个错误的成员函数签名,比如void print(boost::system::error\u code ec)。const关键字被省略。而且,我下次必须写错误消息。
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <iostream>

class printer
{
public:
    printer(boost::asio::io_service& io)
        : timer_(io, boost::posix_time::seconds(1)),
          count_(0)
    {
        timer_.async_wait(boost::bind(&printer::print, this, boost::asio::placeholders::error));
    }
    ~printer()
    {
        std::cout << "Final count is " << count_ << "\n";
    }

    void print(boost::system::error_code const ec)
    {
        if (ec)
            std::cout << "Error: " << ec.message() << "\n";
        if (count_ < 5)
        {
            std::cout << count_ << "\n";
            ++count_;

            timer_.expires_at(timer_.expires_at() + boost::posix_time::seconds(1));
            timer_.async_wait(boost::bind(&printer::print, this, boost::asio::placeholders::error));
        }
    }

private:
    boost::asio::deadline_timer timer_;
    int count_;
};

int main()
{
    boost::asio::io_service io;
    printer p(io);
    io.run();
}