2014-06-28 9 views
18

Enthält die Standardbibliothek von C++ eine Ausnahme, die der NotImplementedException von .NET entspricht?Hat C++ ein Äquivalent zu NotImplementedException von .NET?

Wenn nicht, welche Best Practices für die Behandlung unvollständiger Methoden, die ich später ausführen möchte?

+10

No - throw std :: Ausnahme ("Nicht implementiert") –

+1

@ DieterLücking std :: Ausnahme hat eine Zeichenfolge ctor? – nurettin

+1

@nurettin richtig, es hat keine - std :: logic_error könnte geeignet sein –

Antwort

3

Da dies nur eine vorübergehende Ausnahme ist, der keine Anwendung Bedeutung nicht trägt, können Sie einfach einen char const werfen *:

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

Ich denke, jede Ausnahme nicht abgeleitet von std :: Ausnahme ist böse (Ausnahmen können gelten) –

+1

@ DieterLücking War das letzte "Ausnahme" ein Wortspiel? : p Ich stimme dir zu, aber ich denke, das ist einer der Spezialfälle. Solch eine "Ausnahme" ist wirklich keine Ausnahme, nur eine Möglichkeit, das Programm zu beenden, sobald eine nicht implementierte Funktion aufgerufen wird. Ich würde dafür keine vollwertige Klasse schaffen. – Quentin

+0

Ist 'throw std :: exception (" myFunction ist noch nicht implementiert. ")' Sicherer? – becko

3

Eine gute Praxis für Ihre Anwendung wäre seine eigene Reihe von Ausnahmen zu definieren, einschließlich einem für nicht implementierte Methode, wenn das erforderlich ist. Stellen Sie sicher, dass Sie Ihren Ausnahmetyp von std::exception erben, so dass Anrufer von Ausnahmen, die Funktionen werfen, den Fehler in einer einheitlichen Weise abfangen können.

nur eine mögliche Art und Weise eine NotImplementedException zu implementieren:

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

Im Geiste der @dustyrockpyle, erben ich von std::logic_error aber ich benutze, dass String-Konstruktor der Klasse, anstatt what()

class NotImplemented : public std::logic_error 
{ 
public: 
    NotImplemented() : std::logic_error("Function not yet implemented") { }; 
}; 
zwingende
+0

yep! Einfach eleganter! – Uduse

Verwandte Themen