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).我能做些什么呢?
也许构造函数抛出异常.尝试在其中构建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而不是....