代码之家  ›  专栏  ›  技术社区  ›  DanDan

包装std::exception并引发applicationexception

  •  3
  • DanDan  · 技术社区  · 15 年前

    在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 回复  |  直到 15 年前
        1
  •  3
  •   Marcelo Cantos    15 年前

    我假设您的意思是您正在丢弃派生类型以及它所保存的任何数据。作为一个通用的解决方案,您可以做的事情不多。当然,如果你使用库foo,它经常抛出foo错误,你可以 catch (const FooError& e) 特别处理。

    还可以使用rtti发现异常的运行时类型,并将其添加到.NET异常中。突然出现的名字有点难听。