我在c ++ / CLI库中有以下代码来捕获非托管异常并重新抛出它们:
catch(const std::exception &e)
{
String ^errorMessage = String::Format(L"Parser threw exception: {0}", gcnew String(e.what()));
throw gcnew ApplicationException(errorMessage);
}
这是最好的方法吗?我似乎以这种方式丢失了很多信息。
答案 0 :(得分:3)
我认为你的意思是你丢弃派生类型及其拥有的任何数据。作为通用解决方案,您无法做到这一点。当然,如果您使用库Foo,并且它经常抛出FooError,您可以catch (const FooError& e)
并专门处理它。
您还可以使用RTTI来发现异常的运行时类型,并将其添加到.Net异常中。弹出的名字有些难看。