У меня следующая ситуация.
Это фрагмент кода, отредактированный для демонстрации проблемы.
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) только из-за поврежденного загрузочного файла. И что я могу с этим сделать?