2015-02-09 77 views
1

在C++中创建&句柄异常的常用方法是什么?异常分类

class CannotRead : public runtime_exception { ... } 
class CannotParse : public runtime_exception { ... } 

... 
throw CannotRead(); 
... 

... 
throw runtime_error("cannot read"); 
... 

什么是习惯的方法在C++中做到这一点?

链接到比较两种方法的文章将不胜感激。

感谢

+2

使用显式异常类意味着你可以有更明确的错误处理。如果你得到的只是一个通用的'runtime_error',你真的不能以一种更适合这种异常的方式处理特定的异常。 – 2015-02-09 18:25:41

+0

只需使用'std :: runtime_exception'并为其提供适当的错误消息。我不会为每个案例创建一个额外的例外。 – 2015-02-09 18:26:11

+0

我建议:除了标准例外之外,没有其他的 - 换句话说,尽可能少。 (也来自std :: exception) – 2015-02-09 18:26:29

回答

4

有没有添油加醋建议给,但我个人的经验法则是:

  • std::runtime_error(或它的兄弟姐妹之一,如适用)
  • ,直到你找到你所需要在catch之间区分你的各种异常,然后开始深化继承层次。
1

通常情况下,为他人的意见所提到的,你从std::runtime_error推导和重载what()虚方法。作为读者的练习,还可以编写构造函数来捕获异常消息。 This网站提供了以下代码(尽管我稍微修改了它以反映std::runtime_error更改)。

#include <iostream> 
#include <exception> 

class MyException : public std::runtime_error 
{  
    const char * what() const throw() { 
     return "C++ Exception"; 
    } 
}; 

int main() 
{ 
    try { 
     throw MyException(); 
    } catch(MyException& e) { 
     std::cout << "MyException caught" << std::endl; 
     std::cout << e.what() << std::endl; 
    } catch(std::exception& e) { 
    } 

    return 0; 
} 
+0

更好的是派生'runtime_error'(或其中的一个同级),而不是'exception'。 – 2015-02-09 19:12:22

+0

是的,很好的表演。我编辑了我的答案以反映您的评论。 – 2015-02-09 19:15:27