如何解决GSL期望,确保和窄带广播的核心准则的错误处理
我正在尝试遵循Cpp核心准则,并在适当的地方使用GSL。特别是,我想将Expects
和Ensures
用于前置条件和后置条件,以及span
和narrow_cast
,但错误处理并不可靠且不提供任何诊断。遇到错误时,GSL会简单地调用terminate
,使测试人员不了解导致终止的原因。
所以我的问题是:在出现错误的情况下,如何使用GSL并保持代码的健壮性?更简单地说,如何在终止之前使用GSL并获取错误诊断信息?
解决方法
我看不到实现这一目标的简便方法。您可以编写自己的终止处理程序,该处理程序将由std::terminate
调用,但是它与调用std::terminate
的位置和原因无关。取决于平台,可能有可能获得回溯并至少检索有关调用者的一些信息,但这并没有太大帮助。
对于MS / GSL,我在pull request中提供了一些代码,该代码丰富了narrow_cast
引发的异常,但是PR被拒绝了,因为它引入了流媒体库。 CppCoreGuidelines委员会成员Herb Sutter说:
C ++核心准则编辑者的电话:这似乎是在寻求调试帮助,而在发布模式下这可能会很昂贵。只能在调试模式下添加它,然后仅对不应该在调试和发布模式之间更改其依赖关系的项目添加(这似乎是不可取的,因为它限制了在此类项目中使用GSL)。最好是在引发异常时使用调试器查看信息,例如在
narrow
的实现中设置断点。
我的分支已删除,但如果您希望将该功能集成到代码中,则可以将其恢复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。