우리는 대규모 프로젝트의 초기 단계에 있고 초기 작업 중 하나는 다른 모듈을 오류 코드로 정의하는 것입니다. 이전에는 errno 시스템을 오류 코드로 사용하고 strerror()를 사용하여 오류를 인쇄했습니다. 이것은 매우 간단하고 잘 작동합니다. 우리의 초기 코드의 대부분은 C가 10 % C++ 일 수 있습니다.C++ 사용자 정의 오류 코드 클래스 또는 시스템 오류 번호
[완전히 C++로] 새 프로젝트에서 우리가 바로 따라하면 혼란 스럽습니다. 또는 자체 오류 클래스를 정의하십시오.
예 :
이 일부 C++ 설탕 단지 래퍼 클래스입니다enum class ErrorCode {
FILE_EXIST = EEXIST,
ACCESS_DENIED = EACCESS,
...
};
const char *error_str (ErrorCode code)
{
switch (code) {
case ACCESS_DENIED: return "Access denied";
...
}
}
class Error {
Error (ErrorCode code) : _code (code){}
Error() : _code(0){}
void operator = (ErrorCode code);
bool operator == (ErrorCode code);
operator bool() {return _code != 0;}
const char *string() { return error_str(_code);}
private:
ErrorCode _code;
};
. 그러나 이것을 정의한 후에는 확장 가능성이 아니라 int/strerror()에 값을 추가하지 않고 불필요하게 장황하게 만듭니다. 나는 위의 doesnt가 단지 그것 안에 int를 가지고 있기 때문에 errno에 비해 너무 많은 성능 패널티를 추가하지 않는다고 생각한다.
큰 도움이 필요하십니까? - 큰 C++ 프로젝트 경험으로, 어떻게 되었습니까?
예외가 아닌 이유는 무엇입니까? – kreuzerkrieg
예외 예 ..하지만 오류 코드 – MGH
을 사용해야하는 경우 이전에는 C++ 서버를 다시 작성하고 코드를 반환하는 API를 사용할 때 예외로 변환했습니다. 예를 들어 Win32 API의 경우 'FormatMessageA'를 사용하여 오류 설명을 가져온 다음 Win32Exception을'class Win32Exception : public std :: runtime_error'로 정의하고 Base를 FormatMessageA에서 검색 한 오류 설명으로 초기화했습니다. – kreuzerkrieg