Giant Try Catch Block 在 Main

T L*_*tle 3 c++ program-entry-point exception-handling

我有一个可以在构造函数中抛出异常的类。我不知道拥有此类的代码,因此我无法更改此行为或向此类添加其他实例化或初始化方法。我需要在 main 中创建这个类的一个对象。这是否意味着我需要一个主要由一个巨大的 try / catch 块组成的 main() ,如下所示:

main()
{
  try
  {
    A a;
    ...
  }
  catch(std::exception& e)
  {
    std::cout << e.what() << std::endl;
    return EXIT_FAILURE;
  }
  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

如果这个 main 有数千行长怎么办?这个 try / catch 块很大。我觉得应该有更好的方法来做到这一点,但我想不出一个。

πάν*_*ῥεῖ 6

如果这个 main 有数千行长怎么办?
...我觉得应该有更好的方法来做到这一点,但我想不出一个。

这显然是糟糕设计的标志,应该重构为类和函数调用。

理想情况下是这样的main()

int main(int argc, char* argv[]) {
    try {
        Application app(argc,argv);
        app.run();
    }
    catch(std::exception& e) {
         std::cout << e.what() << std::endl;
         return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
}      
Run Code Online (Sandbox Code Playgroud)

仍然是

try {
    // Refactored 1000 lines of code
}
catch(std::exception& e) {
    std::cout << e.what() << std::endl;
    return EXIT_FAILURE;
}
Run Code Online (Sandbox Code Playgroud)

必须包含调用代码。