Я пишу приложение, которое использует 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?
...
};
Примечание: это вполне может быть преждевременной оптимизацией, но Я все еще хотел бы знать, как объявить объект привязки без авто.