Como posso armazenar um objeto boost :: bind como um membro da class

Estou escrevendo um aplicativo que usaboost::asio. Asio'sasync_receive (ouasync_read) é sempre mostrado usando umboost::bind objeto fornecido para retorno de chamada:

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));

Isso é perfeitamente bom, mas eu gostaria de não precisar recriar o objeto de ligação após cada chamada para o retorno de chamada. Em vez disso, gostaria de criar o objeto, digamos, no construtor da minha classe, e dar para async_receiv

O problema é que não sei como declarar esse objeto como um membro da classe. Tudo o que sei é auto, e obviamente não funcionará como um membro da class

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?
    ...
};

ota: Isso pode muito bem ser otimização prematura, mas eu ainda gostaria de saber como declarar um objeto de ligação sem aut

questionAnswers(4)

yourAnswerToTheQuestion