2009-12-20 2 views
3

을 던지는 I가 관리되지 않는 예외를 포착하고이를 다시 발생하는 C++/CLI 라이브러리에 다음 코드를성병 :: 예외를 포장하고있는 ApplicationException

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

이 최상의 방법이 있나요? 이런 식으로 많은 정보를 잃어 가고있는 것처럼 보입니다.

+0

이제 MS는'Exception'에서 파생 된 사용자 정의 클래스를 사용하여'ApplicationException'의 사용을 권장하지 않습니다. –

+0

그 사실을 몰랐습니다. 나는 항상 ApplicationExceptions이 사용자 정의 예외에 해당한다고 생각했습니다. – DanDan

답변

3

파생 된 유형 및 보유한 데이터를 버리고 있다고 가정합니다. 제네릭 솔루션으로는 그렇게 할 수 없습니다. 물론 Foo 라이브러리를 사용하고 종종 FooError를 throw하면 catch (const FooError& e)을 처리 할 수 ​​있습니다.

RTTI를 사용하여 예외의 런타임 유형을 발견하고 .Net 예외에 추가 할 수도 있습니다. 튀어 나오는 이름은 다소 추합니다.

관련 문제