包装std :: exception并抛出ApplicationException

时间:2009-12-20 14:19:51

标签: c++-cli

我在c ++ / CLI库中有以下代码来捕获非托管异常并重新抛出它们:

catch(const std::exception &e)
{
    String ^errorMessage = String::Format(L"Parser threw exception: {0}", gcnew String(e.what()));
    throw gcnew ApplicationException(errorMessage);
}

这是最好的方法吗?我似乎以这种方式丢失了很多信息。

1 个答案:

答案 0 :(得分:3)

我认为你的意思是你丢弃派生类型及其拥有的任何数据。作为通用解决方案,您无法做到这一点。当然,如果您使用库Foo,并且它经常抛出FooError,您可以catch (const FooError& e)并专门处理它。

您还可以使用RTTI来发现异常的运行时类型,并将其添加到.Net异常中。弹出的名字有些难看。