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