Ловля исключений архива сериализации boost

У меня следующая ситуация.

Это фрагмент кода, отредактированный для демонстрации проблемы.

ifstream ifs("empty_file");
if(!ifs.is_open()) {
    ui.display("Error: Unable to open file \"empty_file\"\n");
    return;
}

archive::text_iarchive ia(ifs);
try {
    ia >> some_class;
} catch (...) {
    ui.display("This should catch ever single exception\n");
}

empty_file действительно является абсолютно пустым файлом. Это должно вызвать ошибку, что и происходит. Проблема в том, что я не могу поймать исключение, вызванное boost, и оскорбить пользователя за то, что он дал мне пустой/поврежденный файл для загрузки.

Вместо этого я получаю следующее:

Loading...
terminate called after throwing an instance of 'boost::archive::archive_exception'
  what():  invalid signature
Aborted

Насколько я знаю, catch(...) должен перехватывать все существующие исключения. Я делаю что-то не так, или boost::serialisation просто ловит свое собственное исключение и прерывается()прежде чем я успеваю что-либо сделать?

Если это так, то мне кажется, или это действительно плохой дизайн? Вся ваша программа не должна аварийно завершаться (abort()ing) только из-за поврежденного загрузочного файла. И что я могу с этим сделать?

5
задан Infiltrator 9 May 2011 в 17:10
поделиться