У меня есть функция обратного вызова, привязанная к boost :: asio :: deadline_timer
. Теперь функция вызывается при отмене таймера или его истечении. Поскольку мне нужно различать эти два случая, мне нужно проверить переданный код ошибки. Основной код будет таким:
void CameraCommand::handleTimeout(const boost::system::error_code& error)
{
std::cout << "\nError: " << error.message() << "\n";
return;
}
Теперь, когда обработчик вызывается из-за истечения таймера, код ошибки - Успех
, когда таймер отменяется, код ошибки - Операция отменена
.
Теперь мой вопрос: как правильно проверить, что произошло?
Предложение 1:
if( error.message() == "Success" )
{
// Timer expired
}
else
{
// Timer cancelled
}
Предложение 2:
if( error.value() == 0 )
{
// Timer expired
}
else
{
// Timer cancelled
}
Теперь мой вопрос - есть ли способ сравнить ошибку самостоятельно, а не по значению или по строке? Что-то вроде (сейчас это придумано)
if ( error == boost::system::error::types::success )
Потому что что мне не нравится в первом предложении, так это то, что мне нужно создать строку только для проверки, что, на мой взгляд, не нужно. У второго способа есть недостаток, заключающийся в том, что мне нужно искать все коды ошибок, если я хочу проверить что-то другое? Итак, есть ли какие-нибудь перечисления или способы проверить наличие ошибки, или у меня есть один из двух предложенных способов?