은 특정 시간 동안 특정 종류의 대기열과 블록을 폴링하는 기능이 있다고 가정합니다. 이 시간이 대기열에 표시되지 않고 경과 된 경우 발신자에게 시간 초과 표시가 전달되어야합니다. 그렇지 않으면 표시되는 무언가가 반환되어야합니다.객체 지향 환경에서 자주 발생하는 오류를 반환하는 방법은 무엇입니까?
지금 당신은 같은 것을 쓸 수있다 :
class Queue
{
Thing GetThing();
}
및 타임 아웃의 경우에 예외를 throw합니다. 또는 당신은
class Queue
{
int GetThing(Thing& t);
}
를 작성하고 성공과 시간 제한에 대한 오류 코드를 반환 .
그러나 솔루션 1의 단점은 너무 바쁜 대기열 시간 초과가 예외적 인 경우가 아니라 오히려 공통적이라는 것입니다. 그리고 솔루션 2는 아무런 내용도 담고 있지 않은 Thing
으로 끝날 수 있기 때문에 오류와 추악한 구문에 대해 반환 값을 사용합니다.
이 문제에 대한 또 다른 (현명한) 해결책이 있습니까? 객체 지향 환경에서 선호되는 솔루션은 무엇입니까?
Thing이 값 또는 ID 의미를 가졌는지 여부에 달려있다. - Thing이 std :: string 또는 int 인 경우, 값에 대한 참조를 변경하면 스트림에서 읽기가 EOF에 도달 할 때 수행하는 작업과 정확히 일치하지 않는다. –