Если ваши исключения не могут перекрываться, то переход к HashTable [ExceptionName] = «Сообщение об ошибке» выглядит как нормальный вариант.Если они могут, вы можете использовать что-то вроде следующего:
Стандартный способ определения кодов сообщений, которые могут перекрываться (то есть происходить одновременно), заключается в использовании степеней двойки:
define ERROR_SYSTEM_DOWN 1
define ERROR_DATABASE_UNREACHABLE 2
define ERROR_SPACE_UNAVAILABLE 4
define ERROR_DISK_DIED 8
и так далее.Затем в коде вы можете сделать
if (disk_died() && no_space()) {
int errorCode = ERROR_DISK_DIED | ERROR_SPACE_UNAVAIABLE; //Binary or
return errorCode;
}
Наконец, на принимающей стороне вы можете:
if (errorCode & ERROR_DISK_DIED == ERROR_DISK_DIED) { //Binary and
//then, at least, disk died. You can check for the rest in the same way
}
Объяснение:
ERROR_SYSTEM_DOWN = 0001
ERROR_DATABASE_UNREACHABLE = 0010
ERROR_SPACE_UNAVAILABLE = 0100
ERROR_DISK_DIED = 1000
Тогда
1000 | 0100 = 1100
и в проверочном коде
1100 & 0100 = 0100
Теперь, если вы используете исключения, вы можете использовать тот же подход, всплывая errorCode до тех пор, пока возникает исключение.Хотя эта идиома чаще встречается у C.