当处理例外时,一般是先捕获例外,然后要么处理它、要么抛弃另一个例外。问题是如果抛弃另一个例外,你就会丢失原先的错误信息。
编程者主要考链接例外来帮助捕捉bug。也就是说,你在一个较高的级次上捕获到错误,然后如果你要处理它,你就记录它。当你检查记录时,就会发现错误发生的真正原因,如果你不链接错误,你很可能做不到这一点。
链接例外的另一个用途就是你可以显示用户友好错误(如显示错误信息,“不能载入员工表。请确认你有访问员工表的权限,然后重试。”)。
你将学会一种简单的链接例外的机制,它可能是一个其它的例外或者一个字符串。当你调用一个返回错误码的函数时,即为后者。你可以把错误码转换为一个字符串,然后把该字符串传递给已链接的例外。
实现可链接的例外
- ChainExceptionBase<
your_class >中导出your_class(你的类名)。为了可以继承一个已经从ChainExceptionBase导出的类,你可以这样导出你的类:ChainExceptionDerived<
your_class, base_class>。
- 你可以通过定义你自己错误类型的方式来重载GetDescription()。(你必须重载GetDescription(),因为你将记录它并把它显示给用户。)
用法
- 为了抛弃一个已链接的例外,你可以这样ChainException(
新例外).chain(原例外) 。原例外可以是一个已链接的例外、std::exception、或者一个字符串(由函数返回的错误码所生成的字符串)。
- GetDescription()将会返回例外的描述,而不管嵌套(nested)例外。
- GetNestedDescription()将会返回该例外以及嵌套例外的描述。
你可以在这儿下载Zip文件,它包含了一个例子。