저는 지금까지 C++ 게임 프로그래밍 경력을 쌓아 왔지만 실제로 예외를 만지지는 못하지만 최근에는 오우거 엔진을 사용하여 프로젝트를 진행했으며 제대로 배우려고합니다. C++ 예외의 일반적인 사용법에 대한 많은 좋은 질문과 답변을 여기에서 찾았지만 Ogre의 사용법이 좋은지, 어떻게 사용하는 것이 가장 좋은지에 대한 외부의 의견을 듣고 싶습니다. 오우거 (Ogre)의 예외 사용은 좋은 방법인가?
는 자신의 예외 클래스의 오우거의 문서를 인용, 시작하려면 :괴물 오류를 나타내는 반환 값을 사용하지 않습니다. 대신에 오류가 발생하면 예외가 throw되며 이는 문제의 세부 사항을 캡슐화하는 객체입니다. OGRE를 사용하는 응용 프로그램은 항상 예외가 catch되는지 확인해야하므로 모든 OGRE 엔진 함수는 try {} catch (Ogre :: Exception & e) {} 블록 내에서 발생해야합니다.
정말요? 모든 오우거 함수는 예외를 throw하고 try/catch 블록에 래핑 될 수 있습니까? 현재 이것은 try/catch in main에 의해 사용되며, 종료 전에 예외 설명이있는 메시지 상자가 표시됩니다. 디버깅에는 약간의 어색함이있을 수 있습니다. 스택 추적을 얻지 못했을 때 오류를 던진 함수가 더 중요합니다. 오우거 함수라는 코드의 함수가 더 중요합니다. 오우거 코드에서 어설 션이라면 바로 디버거의 코드로 간다. 그리고 나는 훨씬 더 쉽게 진행되는 것을 발견 할 수있을 것이다. 이미 예외를 디버그합니까?
이제 Ogre 함수가 예외를 throw하면 문제가되는지 여부에 대해 일반적으로 생각하는 코드에 try/catch 블록을 추가하기 시작합니다. 모든 것이 작동을 멈추게 할만한 것이라면 메인 트릭/캐치가 처리하고 프로그램을 종료하도록하십시오. 중요하지 않은 경우 함수 호출 바로 다음에 catch하고 프로그램을 계속 진행하십시오. 최근의 한 가지 예는 엔티티에 적용된 재질에 대한 정점/조각 프로그램 매개 변수의 벡터를 작성하는 것입니다. 재료에 매개 변수가없는 경우 예외가 발생하면이를 잡아내어 무시했습니다. 내 매개 변수 목록에 추가 할 필요가 없습니다. 이것은 사물을 다루는 합리적인 방법처럼 보입니까? 오우거 작업에 대한 구체적인 조언을 많이 주시면 감사하겠습니다.
+1 "예외로 의미가 있든 어디에서라도 처리 할 수 있습니다." – Yacoby
매개 변수를 찾는 마지막 예제에 예외가 적용됩니다. 예외가 일어나기 전에 아무 것도 수정되지 않으면 문제가 발생하지 않습니다. timday는 던져 질 때 예외를 디버깅하는 방법을 많이 지적합니다. 디버깅 모드에서 기본 try/catch를 꺼내면 예외가 잡히지 않으면 어떻게 될까요? – identitycrisisuk
예외가 잡히지 않으면 디버거가이를 catch하고 던져진 지점을 표시합니다. – Christopher