Из представленных вами вариантов лучше всего использовать коды возврата.Обычно код возврата с нулем указывает на успех, а код возврата каждого другого имеет свое собственное положительное целое значение.30 ошибок не много.Как вы уже сказали, вам нужно будет написать код для перевода этих кодов в нечто понятное человеку, но вы все равно должны это сделать.
Я бы подумал написать иерархию исключений, чтобы сделать это вместо ошибкикоды, однако.Исключения могут быть более выразительными, чем коды возврата, и код может быть чище, если все сделано правильно.Как правило, вы проектируете свою библиотеку так, чтобы для каждого типа условия возврата ошибки был свой класс исключений, каждый из которых в конечном итоге был получен из std::exception
.Метод what()
дает вам место для построения человеческого сообщения, а сам тип исключения описывает ошибку.
Есть те, кто скажет вам, что исключения являются «только» для исключительных обстоятельств., как ваш компьютер загорелся, или что-то.Это горячо обсуждаемое утверждение.Я скажу вам, что это чепуха.То, что оно называется «исключением», не означает, что ваш компьютер должен загореться, чтобы использовать его.Исключения дают вам много преимуществ, одно из самых больших - это раскрутка стека.Запрещать использовать их просто из-за какой-то произвольной строки, где ошибки «достаточно плохие», глупо.