捕获提升序列化归档例外

Inf*_*tor 5 c++ serialization boost exception archive

我有以下情况.

这是一个代码片段,经过编辑以证明问题.

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");
}
Run Code Online (Sandbox Code Playgroud)

empty_file确实是一个完全空的文件.这应该会导致错误; 它确实如此.问题是我无法捕获boost引发的异常并滥用用户给我一个空/损坏的文件加载.

相反,我得到以下内容:

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

据我所知,catch(...)应该捕获存在的每个异常.我做错了什么,或者是boost :: serialization只是抓住自己的异常并在我有机会做任何事情之前中止()ing?

如果是后者,那么它只是我还是那个非常糟糕的设计?您的整个程序不应该只是从损坏的加载文件崩溃(abort()ing).我能做些什么呢?

Fre*_*son 7

也许构造函数抛出异常.尝试在其中构建text_iarchive对象try,如下所示:

try {
    archive::text_iarchive ia(ifs);
    ia >> some_class;
} catch (...) {
    ui.display("This should catch every single exception\n");
}
Run Code Online (Sandbox Code Playgroud)

假设捕获异常,你当然想要捕获它boost::archive::archive_exception而不是....

  • @Tim:我只是假装我从来没有犯过类似的错误.; v)的 (3认同)