创建从std :: exception派生的用户异常?

时间:2009-01-12 06:17:04

标签: c++ exception

如何从标准异常创建用户异常类?

解决以下案件 假设我有一个带有一些表示对象类型的枚举的类

所以基于类型,成员函数是可用的。不可用的调用成员函数应该抛出异常。同样,当再次调用未初始化的getter时,应该抛出异常(我使用默认参数来检查未初始化的对象)。

1 个答案:

答案 0 :(得分:9)

您应该从std :: runtime_error或其他标准异常(参见< stdexcept>)而不是直接从std :: exception派生。除了描述究竟发生了什么之外,它还正确地定义了what()方法。

通常,最好为每个问题定义一个不同的异常,而不是使用枚举。这允许try catch机制捕获适当的问题,但这完全取决于你的确切情况,如果没有进一步的信息,很难知道。

class myException: public std::runtime_error
{
    public:
        myException(std::string const& msg):
            std::runtime_error(msg)
        {}
};

可是:

so based on type, member functions are available.Calling member function
that is not available should throw an exception.

这闻起来很有趣(如马丁福勒的嗅觉(看看他的书))。