我在状态机内调用了很多外部函数 - 或者明确地像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
哪个选项最好?有更好的策略吗?
异常处理程序应该如何处理捕获到的异常?我想这只会改变统计数据。 – smrt28
将异常视为您无法处理的异常。并且总是添加一个错误状态,所以你不必扔。 –