如何替换动态异常规范:throw(...)

How to replace dynamic exception specifications: throw(...)

我正在开发一个使用遗留库的项目,该库使用像

这样的函数定义
void func() throw(some_exception);

由于 dynamic exception specifications 在 C++17 中被删除,我想知道如何解决这个问题。

  1. P0003R0建议替换

    void func() throw(some_exception)
    {
        /* body */ 
    }
    

    类似

    void func()
    {
        try
        {
            /* body */
        }
        catch(const some_exception&) {
           throw;
        }
    }
    

    但是,我无权访问源代码(只有 header 文件)。

  2. 所以我只能尝试 "fix" header 中的函数定义。所以例如我可以写

    void func() noexcept(false);
    

    但是当函数抛出异常时,我的应用程序仍然终止。

如何更改 header 文件中的函数定义或可能调整我自己的项目(我使用 func 的地方)以获得与 throw(some_exception) 相同的行为在 C++17 之前?

只需删除动态异常规范。这就是您需要做的。

C++ 不是 Java;在 C++ 中,所有函数(在语言级别)都假定抛出任何东西,除非它们被标记为 noexcept。因此,如果您删除异常规范,它将像以前一样工作。