Как сохранить объект boost :: bind в качестве члена класса?

Я пишу приложение, которое использует boost :: asio . Asio async_receive (или async_read ) неизменно отображается с использованием объекта boost :: bind , заданного для обратного вызова:

boost::asio::async_read(socket_,
                        boost::asio::buffer(read_msg_.data(),
                                            chat_message::header_length),
                        boost::bind(&chat_session::handle_read_header,
                                    shared_from_this(),
                                    boost::asio::placeholders::error));

Это прекрасно, но я бы не хотел воссоздавать объект привязки после каждого вызова обратного вызова. Вместо этого я хотел бы создать объект, скажем, в конструкторе своего класса, и передать его async_receive.

проблема в том, что я не знаю, как объявить этот объект как член класса. Все, что я знаю, это auto, и он, очевидно, не будет работать как член класса.

class Whatever
{
public:
    Whatever()
    {
        functor = boost::bind(&Whatever::Callback);
    }
private:
    void Callback()
    {
        boost::asio::async_read(socket_,
                        boost::asio::buffer(read_msg_.data(),
                                            chat_message::header_length),
                        functor);
    }

    ?? functor; // How do I declare this?
    ...
};

Примечание: это вполне может быть преждевременной оптимизацией, но Я все еще хотел бы знать, как объявить объект привязки без авто.

5
задан Gabriel 14 October 2011 в 12:04
поделиться