Всем привет.
Ситуация следующая — разрабатывается небольшой слой кросс-платформенной абстракции (io, sync, mt etc). В который раз возник вопрос, что в каких ситуациях использовать — исключения и коды возврата ошибок.
Есть ли какие-то формальные критерии, по которым можно решить что в данном случае использовать коды возврата ошибки, в данном — исключения.
Например, взять файловые операции. Тут довольно тонкая ситуация — в некоторых случаях важно ошибки обрабатывать прямо рядом с вызовом, в некоторых — не нужно. Хочется иметь какие-то формальные рекомендации, по которым в большинстве случаев можно было бы принимать подобное решение. "Посмотреть как у других" в данном случае не подходит — просто потому, что у других по-разному.
Рассмотрим, например, ситуацию — критическая секция в терминах win32 и именованный мьютекс. С критической секцией вроде без вариантов — там только исключения, тем более, что бросать она их может только в одном редком кейсе, см msdn. Должен ли мьютекс по аналогии бросать эксепшены (читай, инициализироваться в конструкторе), или же иметь методы Create/Open/Close. Как тогда быть с операциями типа wait, которы могут возвращать довольно много различных кодов, часть из которых обычно анализируется сразу рядом, часть — вызывается необратимые последствия...
Если есть ссылки критерии, best practice или что-нибудь подобное — будет супер.
Спасибо!
PS Свое мнение по данному вопросу у меня имеется
В данном случае нужны именно формальные критерии, чтобы каждый конкретный случае не вызывал одинаковых вопросов.