2014-06-28 7 views
18

क्या सी ++ की मानक लाइब्रेरी में .NET के NotImplementedException के बराबर अपवाद नहीं है?क्या सी ++ के पास .NET के NotImplementedException के बराबर है?

यदि नहीं, तो अपूर्ण विधियों को संभालने के लिए सर्वोत्तम प्रथाएं क्या हैं जिन्हें मैं बाद में पूरा करना चाहता हूं?

+10

नहीं - std :: अपवाद फेंक दें ("लागू नहीं किया गया") –

+1

@ डाइटर लुकिंग std :: अपवाद में एक स्ट्रिंग सीटीओआर है? – nurettin

+1

@nurettin right, इसमें कोई नहीं है - std :: logic_error उचित हो सकता है –

उत्तर

21

आप std :: logic_error से विरासत कर सकते हैं, और अपने त्रुटि संदेश को परिभाषित है कि रास्ता:

class NotImplementedException : public std::logic_error 
{ 
public: 
    virtual char const * what() const { return "Function not yet implemented."; } 
}; 

मुझे लगता है कि ऐसा करने से यह अपवाद को और स्पष्ट कर देता है अगर यह वास्तव में एक संभावना है। संदर्भ एसटीडी :: logic_error: यह है कि अगर जरूरत है http://www.cplusplus.com/reference/stdexcept/logic_error/

3

के बाद से यह सिर्फ एक अस्थायी अपवाद है कि किसी भी आवेदन अर्थ नहीं होता है, तो आप सिर्फ एक चार स्थिरांक * फेंक कर सकते हैं:

int myFunction(double d) { 
    throw "myFunction is not implemented yet."; 
} 
+11

मुझे लगता है कि std :: अपवाद से प्राप्त कोई अपवाद बुरा नहीं है (अपवाद लागू हो सकते हैं) –

+1

@ डाइटर लुकिंग क्या वह आखिरी "अपवाद" था? : पी मैं आपसे सहमत हूं, लेकिन मुझे लगता है कि यह विशेष मामलों में से एक है। इस तरह का एक "अपवाद" वास्तव में कोई अपवाद नहीं है, जैसे ही एक अनुपूरक फ़ंक्शन के रूप में प्रोग्राम को समाप्त करने का एक तरीका है। मैं इसके लिए एक पूर्ण श्रेणी नहीं बनाऊंगा। – Quentin

+0

'std :: अपवाद फेंक रहा है (" मेरा कार्य अभी तक लागू नहीं हुआ है। ") 'सुरक्षित? – becko

3

एक अच्छा अभ्यास, आपके आवेदन अपवाद के अपने स्वयं के सेट, लागू नहीं किया गया विधि के लिए एक सहित परिभाषित करने के लिए के लिए किया जाएगा। सुनिश्चित करें कि आप अपने अपवाद प्रकार को std::exception से प्राप्त करते हैं ताकि अपवाद फेंकने वाले कार्यों के कॉलर्स एक समान तरीके से त्रुटि को पकड़ सकें।

बस एक संभव तरीके से एक NotImplementedException लागू करने के लिए:

class NotImplementedException 
    : public std::exception { 

public: 

    // Construct with given error message: 
    NotImplementedException(const char * error = "Functionality not yet implemented!") 
    { 
     errorMessage = error; 
    } 

    // Provided for compatibility with std::exception. 
    const char * what() const noexcept 
    { 
     return errorMessage.c_str(); 
    } 

private: 

    std::string errorMessage; 
}; 
23

@dustyrockpyle की भावना में, मैं std::logic_error से विरासत लेकिन मैं उस वर्ग की स्ट्रिंग निर्माता का उपयोग करें, बल्कि what()

class NotImplemented : public std::logic_error 
{ 
public: 
    NotImplemented() : std::logic_error("Function not yet implemented") { }; 
}; 
अधिभावी से
+0

हाँ! बस अधिक सुरुचिपूर्ण! – Uduse

संबंधित मुद्दे