воскресенье, 23 ноября 2008 г.

boost::system

Библиотека boost может упростить многие рутинные задачи, обработка ошибок в win32 приложениях - одна из них. Вот как это делается обычно.
if( !FlushFileBuffers( handle_ ) )
{
    //report error
    std::stringstream str;
    str << "error in "__FUNCTION__
        << " error code: " << GetLastError() << std::endl;
    throw std::runtime_error(str.str().c_str());
}
Подобный код приходится писать регулярно, это не очень хорошо, но с этим ничего нельзя сделать если вы хотите использовать win32 api напрямую. Но можно его немного упростить с помощью библиотеки boost::system. Данная библиотека предоставляет высокоуровневый интерфейс к кодам ошибок операционной системы :). Причем независимо от операционной системы. Пожалуй проще всего показать на примере:
using boost::system::system_error;
using boost::system::get_system_category;

...

if( !FlushFileBuffers( handle_ ) )
{
    //report error
    throw system_error( GetLastError(), get_system_category(), "in "__FUNCTION__ );
}
boost::system::system_error - это класс исключения, предоставляемый библиотекой, при создании объекта этого класса, в конструктор нужно передать объект класса boost::system::error_code, который хранит код ошибки, а так-же ссылку, на объект класса boost::system::error_category, который отвечает за интерпритацию кодов ошибок на той или иной платформе. И самое для меня приятное, что теперь в сообщении об ошибке будет не только сам код ошибки, но и его текстовое описание, не придется искать его в MSDN :).

Комментариев нет: