我有一个基于文件的哈希表,可以遇到各种文件系统或用户错误。最初我创建了所有数据函数,如bool,如
bool add(int key, int value)
bool get(int key, int &value)
等等,输入/输出将通过参数,成功/失败将作为函数结果。
然后我有一些mmf包装类,我需要为同一个项目傻瓜证明,我意识到他们可以在构造函数中失败,在这种情况下返回bool实际上不是一个选项,所以我添加了一堆
if (!somethingthatindicatesfail) throw std::exception("description here");
对他们来说。
所以现在我有一些东西会在返回bool的东西中引发异常,然后还有系统错误代码,我还需要包含在错误日志中。
它一团糟......我将重写所有失败场景逻辑但在此之前,您首选的错误处理/传输方法是什么?
我想象的最终结果是一个不会崩溃的模块,但会记录错误,防止进一步损坏数据并建议用户关闭它。
答案 0 :(得分:1)
正如您已经指出的那样,您不能使用构造函数的返回码。因此,如果您想要一个适用于所有代码的方法,那么您唯一真正的选择是异常处理。
但请注意,在某些情况下,最好只是中止。特别是,异常将尝试展开堆栈,但如果情况足够严重,则可能会导致进一步损坏,并且中止(现有而不展开堆栈)是更好的选择。
对于这种情况,有(例如)一个单独的监视器来记录问题并在它崩溃时重新启动程序是有意义的。作为一个单独的过程,它可以继续并合理地执行,即使程序本身已经被搞定,只有它唯一合理的选择才能中止。