首页 > 解决方案 > 是否有一种“安全”的方式来声明一个 lippincott 函数,这样它就不会在 catch 之外被调用?

问题描述

Lippincott 函数是将异常转换为返回码的函数,该返回码可以在来自不支持异常的另一种语言(例如 C)的回调中安全处理。此类函数,因为它们故意throw不带参数使用,从而重新抛出最最近捕获的异常,不能在catch块的上下文之外调用。

我想知道现代 C++(c++17 或 c++20)是否有任何声明机制来专门识别此类函数,并确保仅从catch块的上下文(或另一个此类的上下文)调用函数函数),如果从任何其他上下文调用它,则会生成编译时错误。

标签: c++functionexceptionc++17

解决方案


没有办法告诉编译器一个特定的函数只能从一个catch处理程序中调用。

但是,您可以std::current_exception()从 Lippincott 函数中调用以确定当前是否正在处理异常。如果这返回 anullptr则没有异常活动。然后,您可以在运行时通过触发断言和/或让您的函数返回(而不是使用 throw)来处理此问题。


推荐阅读