@ sehe Отлично, спасибо большое. вы сделали мой день ;-)

ел бы создать асинхронную функцию, которая принимает в качестве последнего аргумента boost :: asio :: yield_context. Например.:

int async_meaning_of_life(asio::yield_context yield);

Я также хотел бы согласиться с тем, как Asio возвращает коды ошибок. То есть, если пользователь делает:

int result = async_meaning_of_life(yield);

и функция терпит неудачу, то он бросаетsystem_error исключение. Но если пользователь делает:

boost::error_code ec;
int result = async_meaning_of_life(yield[ec]);

Тогда - вместо броска - ошибка возвращается вec.

Проблема в том, что при реализации функции я не могу найти чистый способ проверить, использовался ли оператор [] или нет, и установить его, если так. Мы придумали что-то вроде этого:

inline void set_error(asio::yield_context yield, sys::error_code ec)
{
    if (!yield.ec_) throw system_error(ec);
    *(yield.ec_) = ec;
}

Но это глупо, потому чтоyield_context::ec_ являетсяобъявлен частным (хотя только в документации).

Еще один способ сделать это - конвертироватьyield возражать вasio::handler_type и выполнить его. Но это решение кажется в лучшем случае неудобным.

Есть ли другой способ?

Ответы на вопрос(1)

Ваш ответ на вопрос