GSL期望,确保和窄带广播的核心准则的错误处理

问题描述

我正在尝试遵循Cpp核心准则,并在适当的地方使用GSL。特别是,我想将ExpectsEnsures用于前置条件和后置条件,以及spannarrow_cast,但错误处理并不可靠且不提供任何诊断。遇到错误时,GSL会简单地调用terminate,使测试人员不了解导致终止的原因。

所以我的问题是:在出现错误的情况下,如何使用GSL并保持代码的健壮性?更简单地说,如何在终止之前使用GSL并获取错误诊断信息?

解决方法

我看不到实现这一目标的简便方法。您可以编写自己的终止处理程序,该处理程序将由std::terminate调用,但是它与调用std::terminate的位置和原因无关。取决于平台,可能有可能获得回溯并至少检索有关调用者的一些信息,但这并没有太大帮助。

对于MS / GSL,我在pull request中提供了一些代码,该代码丰富了narrow_cast引发的异常,但是PR被拒绝了,因为它引入了流媒体库。 CppCoreGuidelines委员会成员Herb Sutter说:

C ++核心准则编辑者的电话:这似乎是在寻求调试帮助,而在发布模式下这可能会很昂贵。只能在调试模式下添加它,然后仅对不应该在调试和发布模式之间更改其依赖关系的项目添加(这似乎是不可取的,因为它限制了在此类项目中使用GSL)。最好是在引发异常时使用调试器查看信息,例如在narrow的实现中设置断点。

我的分支已删除,但如果您希望将该功能集成到代码中,则可以将其恢复。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...