Я использую boost :: bind для передачи функции обработчика в boost :: asio :: async_write. Когда я использую бесплатные функции, они работают нормально, но когда я пытаюсь переместить функции внутри класса, связывание вызывает ошибки, которые я не могу расшифровать.
Что я пытаюсь сделать:
Я пишу некоторые данные с помощью:
boost::asio::async_write(*socket,
boost::asio::buffer(data(),
length()),
boost::bind(handlermessagewrite,
boost::asio::placeholders::error,
this,
boost::asio::placeholders::bytes_transferred));
Затем я обрабатываю запись с помощью бесплатной функции, подпись которой:
void handlermessagewrite(const boost::system::error_code& errorcode,
iodata *msg,
size_t bytes_transferred);
Все работает так, как ожидалось.
При использовании метода экземпляра вы должны передать указатель boost::asio::async_write(*socket,
boost::asio::buffer(data(),
length()),
boost::bind(handlermessagewrite,
boost::asio::placeholders::error,
this,
boost::asio::placeholders::bytes_transferred));
в качестве второго аргумента функции bind ().
boost::asio::async_write(*socket,
boost::asio::buffer(data(),
length()),
boost::bind(handlermessagewrite,
boost::asio::placeholders::error,
this,
boost::asio::placeholders::bytes_transferred));
Я перемещаю обработчик внутри класса ioclient
:
class ioclient {
public:
void handlermessagewrite(const boost::system::error_code& errorcode,
iodata *msg,
size_t bytes_transferred);
}
void ioclient::handlermessagewrite(const boost::system::error_code& errorcode,
iodata *msg,
size_t bytes_transferred);
и соответствующим образом адаптируя код boost :: bind, как показано в официальных учебных пособиях asio:
- boost::bind(handlermessagewrite,
+ boost::bind(&ioclient::handlermessagewrite,
Однако это приводит к очень непрозрачным ошибкам компиляции, чему не способствует тот факт, что одна из строк в моей IDE оказывается обрезанной (code :: blocks):
Я убежден, что делаю что-то не так с привязкой, но не понимаю, что это может быть. Любые идеи?
Что работает:
error_code
И привязка должна быть:bind
- person Igor R.   schedule 08.12.2012