У меня есть сетевая библиотека, которая использует asio для асинхронного чтения и записи.Я нахожу себя пишущим, как мне кажется, глупый шаблонный код:
asio::dispatch(m_strand, [&, cb]() {
m_buffer = write::startup(m_params);
write(m_buffer, [&, cb](std::error_code ec, std::size_t len) {
if (ec) {
sql_state state;
cb(ec, state);
return;
}
read([&](std::error_code ec, packet barray) {
if (ec) {
sql_state state;
cb(ec, state);
return;
}
auto packets = parse::split_into_packets(barray);
uint8_t auth_type{1};
state = fsm::authentication_request(packets.front(), auth_type);
if (state) {
cb(ec, std::move(state));
return;
}
});
});
});
Есть ли способ элегантно абстрагироваться от обработки ошибок?