첫 번째 '심각한'C ++ 라이브러리를 디자인하는 동안 나 자신에게 묻습니다.
예외를 파생시키는 것이 좋은 스타일입니까, std::exception
자손입니까?!
읽은 후에도
아직 확실하지 않습니다. 일반적인 관행 (아마도 좋지는 않지만) 관행 외에도 라이브러리 사용자 std::exception
는 라이브러리 구현에서 표준 라이브러리 함수가 실패한 경우에만 라이브러리 함수가 throw 되고 이에 대해 아무것도 할 수 없다고 가정합니다. 그러나 여전히 응용 프로그램 코드를 작성할 때 매우 편리하며 IMHO는을 던지는 것이 std::runtime_error
좋습니다. 또한 내 사용자는 what()
또는 코드 와 같이 정의 된 최소 인터페이스에 의존 할 수도 있습니다 .
예를 들어, 내 사용자는 잘못된 인수를 제공합니다.를 던지는 것보다 더 편리한 std::invalid_argument
것은 무엇입니까? 그래서 std :: exception의 일반적인 사용법과 결합하여 다른 코드에서 볼 수 있습니다 std::exception
.
생각?
lib_foo_exception
클래스가에서 파생 될 때 std::exception
라이브러리 사용자는 라이브러리 라이브러리 lib_foo_exception
만 잡는 것 std::exception
외에도 잡기만한다는 것입니다. 따라서 라이브러리 예외 루트 클래스를 std :: exception에서 상속 해야하는지 묻습니다 .
lib_foo_exception
있습니까?" 상속을 std::exception
통해 catch(std::exception)
OR로 할 수 있습니다 catch(lib_foo_exception)
. 에서 파생없이 std::exception
, 당신은 그것을 잡을 것입니다 경우에만 경우 로, catch(lib_foo_exception)
.
catch(...)
합니다. 이 언어는 고려중인 사례 (및 "오작동"라이브러리)를 허용하지만 현대적인 모범 사례는 아닙니다.
std::exception
의미하지 않는다 당신이 던져 을std::exception
. 또한,std::runtime_error
상속을하지std::exception
처음부터, 그리고what()
방법에서 유래std::exception
하지std::runtime_error
. 그리고와 같은 일반적인 예외를 발생시키는 대신 자신 만의 예외 클래스를 만들어야합니다std::runtime_error
.