제 질문은 다소 모호하며 적어도 부분적으로 의도적 인 질문입니다. 인터페이스 디자인, 향후 확장 및 테스트 인터페이스에 대한 조기 조언을 원하며 정확한 코드에 대한 정보는별로 찾고 있지 않습니다. 그것이 C++ (17)에 특히 적용되는 솔루션/조언 인 경우에도 완벽합니다.함수가 반환 할 수있는 함수는 무엇이 실패해야합니까?
하드 조합 문제를 해결하는 시뮬레이션을했습니다. 시뮬레이션은 단계적으로 솔루션으로 전파됩니다. 그러나 때로는 단계는 막 다른 길입니다. 예를 들어, 아래의 의사 코드에서 while
루프는 조각을 먹여서 시뮬레이션을 전파합니다. '조각'을 사용하여 시뮬레이션을 전파 할 수없는 경우가있을 수 있습니다. 예 : 그것은 비싸지 만, 그것은 단순히 적합하지 않은 부분이거나, 어떤 이유에서 발생했는지에 대한 것입니다. 실패는 중단 할 이유가없는 정상적인 동작입니다.
while(!allNotHandledPieced.empty())
{
auto nextPiece = allNotHandledPieces.back();
allNotHandledPieces.pop_back();
auto status = simulation.propagate(nextPiece);
if(status == 0)
next; // ok
else if (status == 1)
dropPieceDueToTooBadStatus();
}
실제로 '시뮬레이션'의 경우 실패한 이유는 중요하지 않습니다. 상태는 여전히 유효합니다. 다른 부분을 사용하는 데 문제가 없으며 계속 진행할 수 있습니다. 그러나 나중에, '전파'방법이 실패한 이유를 알 필요가 있습니다. 그런 다음 실패시 의미있는 반환 값을 갖는 것이 합리적 일 수 있습니다.
'실패'를 반환하는 좋은 방법? 이와 같은 경우에 모범 사례이 있습니까?
퇴거에 대해 들어 보셨습니까? – davidhigh
C++에서 std :: optional 17 또는 boost :: optional –
'throw' 키워드를 사용합니다. –