2014-06-10 1 views
0

오류 특정 텍스트 문자열을 추가 할 수있는 C++ 예외에 대한 자체 기본 클래스를 구현하는 방법을 알아 냈습니다. std :: C++ 예외가 C++ 11 : http://www.cplusplus.com/reference/exception/exception/이 아닌 오류 텍스트를 변경할 가능성이 없습니다. 또한 Exception-base 클래스에서보다 구체적인 예외를 파생시키고 싶습니다. 많은 기사를 읽었지 만, 다음 구현이 모든 중요한 측면을 다루고 있는지 확실하지 않습니다.C++에서 자체 예외 클래스 정의

class Exception : public std::exception {  
    public: 
     Exception(const char* message) : m(message) { 

     } 

     virtual ~Exception() throw() { 

     } 

     virtual const char* what() const throw() { 
      return m.c_str(); 
     } 

    protected: 
     std::string m; 

    private: 
     Exception(); 
    }; 

이 구현이 좋습니까?

+3

어떤 문제가 있습니까? http://codereview.stackexchange.com/ – Rakib

+0

에 게시해야합니다. 당신이 찾고있는 것이라고 생각합니다. http://en.cppreference.com/w/cpp/error/runtime_error –

+0

'std :: string'을'std :: runtime_error'로 변경하십시오. – Jarod42

답변

2

당신은

struct Exception : public std::runtime_error 
{ 
    using runtime_error::runtime_error; 
}; 

throw()에 클래스를 축소 할 수 있습니다 당신은 runtime_error에서 파생 (그리고 컴파일러는 생성자를 상속 지원) 경우, 예외 사양은 C++ (11)로 사용되지 않으며 대신 noexcept를 사용합니다.

+0

그리고 때때로 'logic_error'를 던지기를 원합니까? – ComicSansMS

+0

@ComicSansMS 'logic_error'에서 파생됩니까? – user657267

+0

내 요점은 질문에 의해 요청 된 일반적인 Exception 기본 클래스의 경우 가능한 오류 케이스의 작은 하위 집합만을 나타내는'std :: runtime_error'에서 파생되는 것이 이상하게 보입니다. 이것은 나중에 사용자 측에서 적절한 "catch"문을 작성하는 것을 복잡하게 만들 수 있습니다. – ComicSansMS