저는 이전 C 스타일의 코드 일부를 리팩터링하여 C++ 코드와 더 잘 어울리게하려고합니다. 난 여전히 C++생성자는 오류를 어떻게보고해야합니까? 외부 플래그에 대한 포인터?
내가 작업하고있는 코드의 예에 조금 새로운 오전 나는 클래스를 개발의 생각
Errmsg foo{
ErrMsg err = NoError;
/*
Some Processing
*/
err = foo_cleanup(err,/* some parameters*/);
/*
Some More Processing
*/
return err;
}
를 다음과 같습니다 그래서
class foo_class
{
public:
foo_class(Errmsg errmsg_init&,/*Some other arguments */):
errmsg(&errmsg_init),
/*Initialize other parameters */{}
void foo_cleanup (/*Other parameters*/);
// same functionality, but since the source variable is available,
// it can be modified without having to return any variable
~foo_class(){foo_cleanup(/*Parameters*/);}
/*
Member functions
*/
private:
Errmsg* errmsg;
/*Some other parameters */
};
Errmsg foo{
ErrMsg err = NoError;
foo_class foo_obj(err);
/*
Some Processing
*/
// The class would be
//cleaned up before returning
// and the err variable would be
//modified in the destructor
return err;
}
내가 가지고 있지만 이 접근법과 비슷한 것을 사용할 수 있었는지, 이것이 휴대용이 될지 모르겠습니다.
옳은 일입니까?
그렇지 않으면 참조로 변수 오류 메시지를 전달하는 대신 클래스를 초기화하기 위해 포인터를 사용합니까? 아니면 제가 할 수있는 일이 있습니까?
"반환 오류 메시지"접근 방식을 사용하는 외부 코드에 대한 많은 함수 호출이 있기 때문에 현재 단계에서 예외를 사용할 수 없습니다. 많은 기능/여전히 "반환 오류 메시지"접근 방식을 사용하여 외부 코드에서에 호출이 있기 때문에
-1 때문에 ... 많은 것들이 있습니다. 예외는 도구입니다. 모든 것을 무시하고 당신의 신념을 망치라고 말하는 것은 어떻게해야 하는가? 한 문장 응답은 거의 유용하지 않습니다. 제어 흐름으로서의 예외 ?? 등등 ... 제발 당신의 추론을 확장하고 나는 그것을 투표하고 내가 틀렸다는 말을거야. –
내 대답과 링크 된 GOTW를 참조하십시오. 예외는 모든 상황에 적합하지 않지만, 그러한 상황에서는 *** 유효한 대안이 없습니다. 실패한 오브젝트 구성은 그 중 하나입니다. – spraff
흐름 제어가 더 적합한 생성자에서 일을하지 않는 것은 어떻습니까? 때로는 이런 종류의 일을하기에 완벽하게 유효합니다. 이것은 분명히 여기 있지 않습니다. 정말로, 당신은 기회가 있다면 CHeyWeJustAddedANumberException을 던질 것입니다 : P –