Ich versuche, die system_error
Einrichtung zu verwenden, um Fehler in einer Bibliothek von mir zu behandeln. Ich werde kurz die Struktur der Bibliothek besprechen, falls Sie es hilfreich finden: Der Namensraum der Bibliothek heißt commons
und darunter habe ich einen anderen Namensraum namens dynlib
. dynlib
enthalten Klassen, die zum Laden von .so/DLL-Dateien verantwortlich sind:Verständnis der <system_error> Einrichtung in C++ 11
namespace commons {
namespace dynlib {
class DynLibLoader {
};
}
}
Die Fehler, die in den DynLibLoader auftreten können, sind LibraryFailedToLoad
, LibraryFailedToUnload
und SymbolNotFound
. Also meine Gedanken für die Behandlung der Fehler sind die folgenden: Ich werde einen Namespace error
unter dem Namespace dynlib
hinzufügen. Dann definiere ich unter diesem Namensraum eine Enum für std::error_codes
und eine Enum für std::error_conditions
. Von meinem Verständnis der std::error_codes
auf den Wert von errno
(Linux) oder GetLastError
(Win32) und die std::error_conditions
auf Werte wie LibraryFailedToLoad
, SymbolNotFound
usw. Also, hier entsprechen haben, sind meine Fragen:
- Ist mein Verständnis
std::error_code
undstd::error_condition
richtig? - Wie soll ich alle möglichen Werte von
errno
undGetLastError()
kennen, um sie unter meinerstd::error_codes
enum zu definieren? Was ist, wenn Microsoft der API in Zukunft zusätzliche Fehlerwerte hinzufügt? Muss ich zurück zum Quellcode gehen und sie unter der Enum definieren, die ich für diestd::error_codes
habe? - Was ist, wenn wir uns auf einer anderen Plattform befinden und es keine Möglichkeit gibt, den genauen Systemfehlercode herauszufinden, wenn ein Fehler auftritt?
- Was passiert, wenn ich die gleiche
std::error_codes
für den gesamten commons Namensraum haben wollen und nur eine anderestd::error_condition
für jeden Teilnamespace wiedynlib
definieren. Ist das eine gute Übung? Ich würde ja sagen, weil dies doppelten Code vermeidet. Aber steckt dahinter ein Haken? - Im Moment verwende ich eine einzige
std::error_category
für jeden Sub-Namespace von Commons. Ist das eine gute Übung? Denkst du, ich sollte diestd::error_category
anders verwenden?