我在狀態機內調用了很多外部函數 - 或者明確地像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
將異常視爲您無法處理的異常。並且總是添加一個錯誤狀態,所以你不必扔。 –