Cómo configurar error_code en asio :: yield_context
Me gustaría crear una función asincrónica que tome como último argumento boost :: asio :: yield_context. P.ej.:
int async_meaning_of_life(asio::yield_context yield);
También me gustaría ser coherente con la forma en que Asio devuelve códigos de error. Es decir, si el usuario hace:
int result = async_meaning_of_life(yield);
y la función falla, entonces arroja elsystem_error
excepción. Pero si el usuario lo hace:
boost::error_code ec;
int result = async_meaning_of_life(yield[ec]);
Luego, en lugar de lanzar, el error se devuelve enec
.
El problema es que al implementar la función, parece que no puedo encontrar una manera limpia de verificar si se utilizó o no el operador [] y configurarlo si es así. Se nos ocurrió algo como esto:
inline void set_error(asio::yield_context yield, sys::error_code ec)
{
if (!yield.ec_) throw system_error(ec);
*(yield.ec_) = ec;
}
Pero eso es hacky, porqueyield_context::ec_
esdeclarado privado (aunque solo en la documentación).
Otra forma en que puedo pensar en hacer esto es convertir elyield
objetar enasio::handler_type
y ejecutarlo Pero esta solución parece incómoda en el mejor de los casos.
¿Hay otra manera?