相关疑难解决方法(0)

C++异常类设计

什么是一组异常类的好设计?

我看到各种各样的东西,关于什么异常类应该和不应该做什么,但不是一个简单的设计,易于使用和扩展,做那些事情.

  1. 异常类不应该抛出异常,因为这可能直接导致进程终止,而没有任何机会记录错误等.
  2. 它需要能够获得用户友好的字符串,最好是本地化的语言,以便在应用程序无法从错误中恢复之前,在应用程序终止之前告诉它们.
  3. 当堆栈展开时,需要可以添加信息,例如,如果XML解析器无法解析输入流,能够添加源是来自文件,还是通过网络等.
  4. 异常处理程序需要轻松访问处理异常所需的信息.
  5. 将格式化的异常信息写入日志文件(英文,因此没有翻译).

让1和4一起工作是我遇到的最大问题,因为任何格式化和文件输出方法都可能失败.

编辑:所以看了几个类中的异常类,并且在Neil链接的问题中,似乎通常的做法是完全忽略第1项(因此提升建议),这似乎是一个相当糟糕的想法我.

无论如何,我以为我也会发布我正在考虑使用的异常类.

class Exception : public std::exception
{
    public:
        // Enum for each exception type, which can also be used
        // to determine the exception class, useful for logging
        // or other localisation methods for generating a
        // message of some sort.
        enum ExceptionType
        {
            // Shouldn't ever be thrown
            UNKNOWN_EXCEPTION = 0,

            // The same as above, but it has a string that
            // may provide some information
            UNKNOWN_EXCEPTION_STR,

            // For …
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling exception

42
推荐指数
4
解决办法
3万
查看次数

什么时候应该创建自己的异常类型?

我正在开发一个项目,我们将旧的C代码重构为新的C++,我们正在使用异常进行错误处理.

我们正在为不同的模块创建不同的异常类型.

我认为这不值得,但我没有任何有效的论据来证明我的观点.因此,如果我们编写标准库,您将看到vector_exception,list_exception等.

在考虑这件事的时候,我偶然发现了这个问题:

什么时候应该创建自己的异常类型,何时应该坚持已在std库中创建的异常?

另外,如果我们采用上述方法,那么在不久的将来我们可能面临的问题是什么呢?

c++ exception-handling exception

24
推荐指数
3
解决办法
3835
查看次数

标签 统计

c++ ×2

exception ×2

exception-handling ×2