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