Как объявить функцию, которая будут принимать хэндлер, аналогичный асинхронным функциям boost.asio?
Я хочу написать метод, который будет инкопсулировать в себе некоторую логику работы с boost.Asio, но чтоб в этот метод можно было передать хэндлер, который, внутри метода, можно передать в асинхронную функцию boost asio(async_accept, async_send...).
Ниже приблизительный пример.
class Server{
...
void StartAccept(... handler){
...
acceptor.async_accept(socket, handler)
...
}
...
}
Как я понял, async_accept принимает шаблонный тип, следовательно нужно ввести шалон, но какого плана и как. Иными словами, какого типа должен быть handler?
Ответы (1 шт):
Как уже заметил в комментарии @MaximTimakov, в документации описаны все 8 перегрузок данного метода и, конечно же, все типы, которые они принимают. Чтобы было проще, кликайте more... в описании перегрузки и там смотрите на раздел Example. В нём как раз показано, какого типа должен быть handler.
Если брать самый простой вариант (первую перегрузку), то handler должен быть указателем на функцию, возвращающую void и принимающую const boost::system::error_code&, то есть для Вашего примера это будет выглядеть так:
class Server{
...
void StartAccept(... void (*handler)(const boost::system::error_code&)){
...
acceptor.async_accept(socket, handler)
...
}
...
}