【发布时间】:2014-02-21 20:26:15
【问题描述】:
我从我的状态机中调用了很多外部函数——要么明确地像sendMessage(...),要么隐含地像a!=b。到目前为止,我一直试图跟踪可以抛出的内容,但随着数量的增长,对更好方法的需求也在增加。错过一个异常并让它传播到状态机框架的代码中显然会造成很多混乱。
我看到了三个选项,但我希望有人能指出一个更好的选项:
在每个
onEntry、onExit和action处放置一个try catch。由于它们的数量很多而且它们都很漂亮,这几乎会使代码长度增加一倍并降低可读性。制作一大堆函数
noexcept。如果函数在其他地方使用,或者它可以合法抛出并且异常是唯一好的解决方案,这似乎是不可能的。修改我调用的大部分函数以使用 alexandrescu 的
Expected<T>作为返回类型。见:http://channel9.msdn.com/Shows/Going+Deep/C-and-Beyond-2012-Andrei-Alexandrescu-Systematic-Error-Handling-in-C
哪个选项最好?还有更好的策略吗?
【问题讨论】:
-
异常处理程序应该如何处理捕获的异常?我想它只是改变了统计数据。
-
将异常视为您无法处理的异常。并且总是添加一个错误状态,这样你就不必抛出了。
标签: c++ exception-handling try-catch noexcept