c++ - 是否有一种“安全”的方式来声明一个 lippincott 函数,这样它就不会在 catch 之外被调用?
问题描述
Lippincott 函数是将异常转换为返回码的函数,该返回码可以在来自不支持异常的另一种语言(例如 C)的回调中安全处理。此类函数,因为它们故意throw
不带参数使用,从而重新抛出最最近捕获的异常,不能在catch
块的上下文之外调用。
我想知道现代 C++(c++17 或 c++20)是否有任何声明机制来专门识别此类函数,并确保仅从catch
块的上下文(或另一个此类的上下文)调用函数函数),如果从任何其他上下文调用它,则会生成编译时错误。
解决方案
没有办法告诉编译器一个特定的函数只能从一个catch
处理程序中调用。
但是,您可以std::current_exception()
从 Lippincott 函数中调用以确定当前是否正在处理异常。如果这返回 anullptr
则没有异常活动。然后,您可以在运行时通过触发断言和/或让您的函数返回(而不是使用 throw)来处理此问题。
推荐阅读
- python - 循环根据多列条件过滤行 pandas python
- linq - 实体框架核心组按日期
- python - 将每个数据帧值复制 n 次
- dictionary - 如何将 JSON 输出保存到字典中?
- python-3.x - Python:python ast 中的 ast.FunctionType 是什么?
- python - 根据现有列中的值创建新列并合并行
- git - Git - 如果新 URL 的 git 历史记录完全不同,如何删除子模块并以相同的名称和路径再次创建它?
- python - 函数的 Sphinx 自动摘要模板在哪里?
- python - 时间序列单变量数据集的异常预测算法
- python - Python“无法分配给函数调用”