próbuję dowiedzieć się, w jaki sposób nowa system_error
wraz z error_code
, error_category
a nie najmniej (przeznaczona do wdrożenia przenośny błąd raportowanie) error_condition
powinny być stosowane.Implementacja dobrego C++ 0x error_condition?
Myślę, że czytając boost.system Rozumiem, jak powinienem używać error_codes
i error_category
. W opisie pominięto sposób, w jaki jest on używany w połączeniu z wyrzucaniem wyjątku z atrybutem system_error`, ale z interfejsu tej klasy mogę zgadnąć.
class system_error : public runtime_error {
public:
// [...]
system_error(error_code ec, const string& what_arg);
system_error(int ev, const error_category& ecat, const string& what_arg);
system_error(int ev, const error_category& ecat);
// [...]
Więc rzucam system_error
-exception z prawem int
+ error_category
lub error_code
z error_category()
-method.
Ale co ten sposób, aby zapewnić interfejs przenośny z error_condition
?
Zarówno error_code
ierror_category
zarówno method default_error_condition
:
class error_category {
public:
// [...]
virtual error_condition default_error_condition(int ev) const noexcept;
// [...]
class error_code {
public:
// [...]
error_condition default_error_condition(int ev) const noexcept;
// [...]
W error_category
-Instances powinny być wstępnie utworzone, na przykład (użytkownika kodu)
struct AppCategory : public error_category {
const char *name() const noexcept override {
return "application"; }
string message(int ev) const override {
switch(ev) {
case 14: return "error message";
default: return "???";
}
}
error_condition default_error_condition(int ev) const noexcept override {
... ??? ...
}
};
Moje pytania dotyczące tego:
- Czy powinienem wdrożyć
default_error_condition
werror_category
i jak? - lub w jaki sposób mogę podłączyć
error_codes
do prawidłowegoerror_conditions
, - i mam wstępnie skonstruować
error_condition
instancji? - Klasa użytkownika
error_code
nie powinna być dostarczana przez użytkownika (mnie), prawda?
Czy jest dobrym przykładem, gdzie można zapoznać się z kodem jak error_condition
ma być przedłużony przez użytkownika, w połączeniu z system_error
-exceptions?
Jeśli mam zestaw warunków błędu z mojej aplikacji obsługującej wiele platform, w jaki sposób należy je zgłaszać? Z dokumentacji wydaje się dziwne umieszczenie ich w 'system_error', ponieważ powoduje, że platforma jest zależna od' error_code'. Na przykład mam 'wyliczenie', które jest określone jako' is_error_condition_enum' i mam 'error_category', która pasuje do tych warunków błędu. Czy w tym przypadku muszę utworzyć wyjątek, który niesie "error_condition"? –
Można utworzyć nowy typ wyjątku: patrz na przykład 'std :: future_error', który jest specyficzny dla interfejsu API Futures. –
Dzięki. To świetne odniesienie. Dziękuję również za całą pracę wykonaną na 'this :: thread',' boost :: thread' oraz 'std :: thread'. Są czystą wygraną. –