Как правильно проверять код ошибки Boost?

У меня есть функция обратного вызова, привязанная к 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 )

Потому что что мне не нравится в первом предложении, так это то, что мне нужно создать строку только для проверки, что, на мой взгляд, не нужно. У второго способа есть недостаток, заключающийся в том, что мне нужно искать все коды ошибок, если я хочу проверить что-то другое? Итак, есть ли какие-нибудь перечисления или способы проверить наличие ошибки, или у меня есть один из двух предложенных способов?

15
задан Sam Miller 15 April 2012 в 19:47
поделиться