Обтекание std :: exception и выбрасывание ApplicationException - PullRequest
3 голосов
/ 20 декабря 2009

У меня есть следующий код в библиотеке 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 Ответ

3 голосов
/ 20 декабря 2009

Я предполагаю, что вы имеете в виду, что вы отбрасываете производный тип и все данные, которые он содержит. Вы ничего не можете с этим поделать как универсальное решение. Конечно, если вы используете библиотеку Foo, и она часто выдает FooError, вы можете catch (const FooError& e) и обработать это специально.

Вы также можете использовать RTTI, чтобы обнаружить тип времени выполнения исключения и добавить его в исключение .Net. Имя, которое появляется, несколько уродливо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...