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
但我不打算在GTKMM程序中处理这些异常并做其他事情

在这种情况下,如果出于良好的编程实践,我必须实现try/catch块,那么基本代码如下所示:

试试看{
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;
}