我正在寻找一个返回当前异常对象的函数/代码。换句话说,表示当前正在处理的异常的异常对象(由
catch
块)。
例如:
try
{
// throws an exception
}
catch (const std::exception& Exc)
{
DoSomething();
}
void DoSomething() {
// How to get the "Exc" here?
}
换句话说,我需要一个相当于 Delphi 的
ExceptObject
函数的 C++ 函数。
上面的代码只是一个例子。真正的代码看起来更像这样:
catch (...)
{
A3rdPartyCode();
}
void A3rdPartyCode() {
MyCode();
}
void MyCode() {
// Does not work, returns NULL:
TObject* = ExceptObject();
// ???
// Need to know the current exception, if present
}
很可能您正在以错误的方式寻找解决方案,试图逐行匹配 Delphi 和 C++。无论如何,这是一个如何使用
current_exception
的示例:
#include <iostream>
#include <exception>
void f()
{
throw "exception from f()";
}
std::exception_ptr pce;
void g() noexcept
{
try
{
f();
}
catch (...)
{
pce = std::current_exception();
}
}
void h() noexcept
{
try
{
if ( pce )
std::rethrow_exception(pce);
}
catch (const char* e)
{
std::cout << e;
}
}
int main()
{
g();
h();
}
current_exception
很有用,例如,如果您正在使用可以为集合中的每个项目抛出异常的函数在辅助线程中处理集合。您可以存储异常并稍后将其转发到主线程,而不是中断处理。