可以使用Doxygen等工具编写类似以下的文档注释:
/**
* @throw Exception ...
* @throw ExceptionThrownByHelper ...
* @throw ExceptionThrownByHelpersHelper ...
*/
void theFunction()
{
helperWhichMayThrowException();
}
同时 helperWhichMayThrowException()
也调用其他可能会抛出异常的函数。
你可以选择以下方法:
- 递归地跟随所有
theFunction()
调用的函数,并查找该函数抛出的异常。这是一项繁重的工作,当你添加一个 helper 的异常时,你可能会忘记在某个地方记录一个异常。 - 捕获
theFunction()
中 helpers 抛出的所有异常并转换它们,以确保只抛出指定的异常。但这样做又有何意义呢? - 不要担心 helper 函数抛出的异常,但这样一来,你就无法对所有异常进行单元测试,因为你不知道公共函数可能抛出哪些异常。
- 使用一些工具(半)自动列出所有 helper 等抛出的异常。我查看了 Doxygen 的文档,但没有找到实现的方法。
我想使用第四种方式,但我还没有找到一个好的解决方案,也许可以用 Doxygen 实现呢?或者我只是想过分记录异常?
编辑:也许不是很清楚,但我正在寻找一种方便的方式(最好使用 Doxygen)来记录一个函数可能抛出的所有异常,而不需要手动检查所有 helper 函数。方便的方式包括“不记录所有异常”或“捕获并转换 theFunction()
中的所有异常”。
std::bad_alloc
。你应该始终假设许多操作可能会抛出它,例如动态分配或容器操作,并且你应该使用RAII进行防御性编码。然而,这并不意味着你需要在所有地方都放置处理程序,因为在大多数应用程序中,你几乎不可能看到它,当它发生时,你很难恢复它。 - James McNellis