如何替换动态异常规范:throw(...)
How to replace dynamic exception specifications: throw(...)
我正在开发一个使用遗留库的项目,该库使用像
这样的函数定义
void func() throw(some_exception);
由于 dynamic exception specifications 在 C++17 中被删除,我想知道如何解决这个问题。
P0003R0建议替换
void func() throw(some_exception)
{
/* body */
}
类似
void func()
{
try
{
/* body */
}
catch(const some_exception&) {
throw;
}
}
但是,我无权访问源代码(只有 header 文件)。
所以我只能尝试 "fix" header 中的函数定义。所以例如我可以写
void func() noexcept(false);
但是当函数抛出异常时,我的应用程序仍然终止。
如何更改 header 文件中的函数定义或可能调整我自己的项目(我使用 func
的地方)以获得与 throw(some_exception)
相同的行为在 C++17 之前?
只需删除动态异常规范。这就是您需要做的。
C++ 不是 Java;在 C++ 中,所有函数(在语言级别)都假定抛出任何东西,除非它们被标记为 noexcept
。因此,如果您删除异常规范,它将像以前一样工作。
我正在开发一个使用遗留库的项目,该库使用像
这样的函数定义void func() throw(some_exception);
由于 dynamic exception specifications 在 C++17 中被删除,我想知道如何解决这个问题。
P0003R0建议替换
void func() throw(some_exception) { /* body */ }
类似
void func() { try { /* body */ } catch(const some_exception&) { throw; } }
但是,我无权访问源代码(只有 header 文件)。
所以我只能尝试 "fix" header 中的函数定义。所以例如我可以写
void func() noexcept(false);
但是当函数抛出异常时,我的应用程序仍然终止。
如何更改 header 文件中的函数定义或可能调整我自己的项目(我使用 func
的地方)以获得与 throw(some_exception)
相同的行为在 C++17 之前?
只需删除动态异常规范。这就是您需要做的。
C++ 不是 Java;在 C++ 中,所有函数(在语言级别)都假定抛出任何东西,除非它们被标记为 noexcept
。因此,如果您删除异常规范,它将像以前一样工作。