내가 지정된 객체로 변환의 여러 유형을 수행 할 수있는 클래스가 객체.대안
모든 데이터는 사용자가 손으로 만든 명령 파일을 통해 제공되지만 대부분의 경우 파일 명령이 변환되기 전까지 유효한지 여부를 알 수있는 방법이 없습니다.
이러한 변환 방법은 개체에서 호출되며 새로 변환 된 개체를 반환하지만 문제가 발생하면 개체를 반환 한 후 예외가 발생합니다 (빈 개체조차도 예외가 발생 함).)는 성공과 혼동 될 수 있지만 예외는 명확한 신호를 보내고 문제가 있으며 객체를 반환 할 수 없습니다. 그것은 또한 우리가 잘못 그래서이 보인다에 많은 답변을 읽기에서 그러나 (오류 코드, 메시지, 성명 등)
정확히 무엇인지 찾기 위해 "마지막 오류"타입의 함수를 호출 할 필요가 없습니다 의미 잘못된 사용자 입력이 예외적 인 상황이 아니기 때문에 올바르지 않습니다. 그리고이 명령문의 복잡성으로 인해 사용자가 잘못된 명령 파일을 제출하는 경우는 드뭅니다. 우리가 오류를 치면 우리가 중지하고 사용자에게 다시 이동해야하기 때문에
성능은 여기에 정말 문제가되지 않습니다. 내가 반환 코드를 사용하는 경우
나는 만약 내가 긴 중첩 필요하려는 반환 코드를 확인하기 위해 다음 매개 변수로 출력 개체를 가지고해야 할 것 블록 (예. 방법은 COM에서 HRESULT 확인)
코드를 적당하게 깔끔하게 유지하면서이 경우 예외를 피하는 방법은 무엇입니까?
는
해당 인스턴스가 유효한지 여부를 알기 위해 개체 자체에 플래그를 추가 할 수 없습니까? –
¤ 대답은 바보 같은 이상을 수용하기 위해 디자인을 변경하지 않는 것입니다. 실용적이고 로널드 레이건의 말을 기억하십시오. 그것이 파손되지 않으면 고치지 마십시오. 즉, Barton Nackman "Fallible"개념, 논리적으로 비어있는 반환 객체 유형 및 비어있는 경우 포함 된 값의 액세스가 실패한 경우를 사용할 수 있습니다. 실패는 종료 또는 예외 일 수 있습니다. 'boost :: optional' 클래스는 무효 한 결과 액세스에 대한 예외를 기반으로합니다. 건배 & hth., –
@puller : 의견을 주셔서 감사합니다. 그러나 플래그를 확인하려고 할 때 반환 여부를 확인해야하는 경우 해당 플래그를 어딘지에서 확인해야합니다 (플래그가 설정되면 처리를 계속하고 싶지 않습니다). 값. – TownCube