C++ 从资源创建Gtk::Builder而不实现try/catch块可以吗?
C++ 从资源创建Gtk::Builder而不实现try/catch块可以吗?,c++,gtkmm3,C++,Gtkmm3,Gtk::Builder::create_from_resource()在出现问题时抛出以下异常,例如,找不到资源文件或Glade/UI文件中存在标记错误等 建筑错误 油嘴滑舌的 Gio::ResourceError 但我不打算在GTKMM程序中处理这些异常并做其他事情 在这种情况下,如果出于良好的编程实践,我必须实现try/catch块,那么基本代码如下所示: 试试看{ auto resource=Gtk::Builder::从资源创建资源(“/domain/reverse/myappid
Gtk::Builder::create_from_resource()
在出现问题时抛出以下异常,例如,找不到资源文件或Glade/UI文件中存在标记错误等
- 建筑错误
- 油嘴滑舌的
- Gio::ResourceError
试试看{
auto resource=Gtk::Builder::从资源创建资源(“/domain/reverse/myappid”);
}捕获(const Gio::ResourceError&ex){
cerr如果您真的不想处理异常,那么如果抛出了某个异常,程序就会突然终止
我个人更喜欢在这些情况下使用。在您的情况下,所有异常都源自std::exception
或Gtk::BuilderError
,因此您的处理程序可能看起来像:
int main()
{
try
{
// Program code, eventually a call to `Gtk::Builder::create_from_resource`.
}
catch(const std::exception& p_exception)
{
cerr << p_exception.what();
}
catch(const Gtk::BuilderError& p_exception)
{
cerr << p_exception.what();
}
return 0;
}
这具有捕获所有内容的优势(即使是不是std::exception
的子类的异常)但是,它的缺点是,您可以取消异常消息,至少对于标准C++。谢谢有关全局异常处理的附加信息:)和答案…在我的场景中,我更喜欢程序崩溃。
int main()
{
try
{
// Program code, eventually a call to `Gtk::Builder::create_from_resource`.
}
catch(...)
{
// Do something, but the exception message is not available.
}
return 0;
}