C++ cli 包装std::异常并引发ApplicationException

C++ cli 包装std::异常并引发ApplicationException,c++-cli,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); } 这是最好的方式吗?这样我似乎丢失了很多信息 我假

我在c++/CLI库中有以下代码,用于捕获非托管异常并重新引用它们:

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

这是最好的方式吗?这样我似乎丢失了很多信息

我假设您的意思是,您正在丢弃派生类型及其包含的任何数据。作为一个通用的解决方案,您对此无能为力。当然,如果您使用库Foo,并且它经常抛出foorerror,那么您可以
catch(constfoorerror&e)
并专门处理它


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

注意,MS现在不鼓励使用
ApplicationException
,而支持从
Exception
派生的自定义类;我一直认为ApplicationException是针对我们的自定义异常的。