Здравствуйте, developer, Вы писали:
D>Привет всем.
D>У меня такой вопрос — в проекте становится до фига исключительных ситуаций. Например, есть сложный метод, который уже кидает кучу разных исключений. Конечно есго можно разбить на несколько методов и упростить, но вопрос не в этом. Как организовать все эти исключения различных методов в проекте?
D>Более конкретно:
D>Стоит ли использовать исключения, которые не унаследованы от std::exception?
Не вижу особого смысла. Проще всё-таки наследовать от стандартных.
D>Стоит ли наследовать все исключения от какого-то одного класса, например, от std::runtime_error — чтобы иерархия исключений имела один единственный корень?
Да, вполне естественно — иметь один базовый класс исключений.
Вот подробнее:
https://isocpp.org/wiki/faq/exceptions
http://en.cppreference.com/w/cpp/error/exception
https://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm
http://www.cplusplus.com/doc/tutorial/exceptions
D>Стоит ли как-то сгруппировать исключения в группы (т.е. для каждого метода своя группа исключений)?
Стоит ли усложнять?
Делай как можно проще:
https://en.wikipedia.org/wiki/KISS_principle
D>Иногда бывает одинаково уместно или вернуть false или кинуть исключение — что предпочесть?
В стиле C++ всё таки — кинуть исключение; В стиле C — вернуть значание
Приимущество исключения — меньше вероятности, что проблема останется незамеченной.
P.S. Вот ещё полезная информация:
https://stackoverflow.com/questions/12261915/howto-throw-stdexceptions-with-variable-messages
https://stackoverflow.com/questions/3074646/how-to-catch-unknown-exception-and-print-it
Применение
std::exception_ptr:
http://en.cppreference.com/w/cpp/error/exception_ptr
https://stackoverflow.com/questions/14232814/how-do-i-make-a-call-to-what-on-stdexception-ptr
https://msdn.microsoft.com/en-us/library/dd293602.aspx