팀 isSuccessful
에서 오류 코드와 함께 부울 이나 열거 형 을 반환하는 대신 C ++에서 예외를 사용할 수 있도록 설득하려고 합니다. 그러나 나는 그의 비판에 반대 할 수 없다.
이 라이브러리를 고려하십시오.
class OpenFileException() : public std::runtime_error {
}
void B();
void C();
/** Does blah and blah. */
void B() {
// The developer of B() either forgot to handle C()'s exception or
// chooses not to handle it and let it go up the stack.
C();
};
/** Does blah blah.
*
* @raise OpenFileException When we failed to open the file. */
void C() {
throw new OpenFileException();
};
개발자가
B()
함수를 호출한다고 가정하십시오 . 그는 문서를 확인하고 예외를 반환하지 않는 것을 확인하므로 아무것도 잡으려고 시도하지 않습니다. 이 코드는 프로덕션 환경에서 프로그램을 중단시킬 수 있습니다.개발자가
C()
함수를 호출한다고 가정하십시오 . 그는 문서를 확인하지 않으므로 예외를 포착하지 않습니다. 호출이 안전하지 않아 프로덕션 환경에서 프로그램이 중단 될 수 있습니다.
그러나 우리가 이런 식으로 오류를 확인하면 :
void old_C(myenum &return_code);
해당 함수를 사용하는 개발자는 해당 인수를 제공하지 않으면 컴파일러에서 경고를 받고 "Aha, 이것이 확인해야하는 오류 코드를 반환합니다."라고 말합니다.
어떤 종류의 계약이 발생하도록 예외를 안전하게 사용하려면 어떻게해야합니까?
Either
/ Result
monad를 사용하여 형식이 안전한