Чтобы ответить на вопросы в библиотеке, напишите a look по адресу boost::exception
.
Исключения для увеличения могут перемещаться из потока в нить, и вы можете динамически присоединять информацию к исключению - с operator<<
- как вы поймаете (и, возможно, повторно запустите) его. Кроме того, макрос BOOST_THROW_EXCEPTION
записывает имя файла, строки и функции в ваше выражение для печати.
В противном случае принято определять собственные исключения для вашего проекта. Но трудно дать более конкретные ответы, так как я не знаком с «java-подобной утилитой», о которой вы говорите.
Как более общее примечание, один из принципов дизайна C++ заключается в том, чтобы делать то, что вы просите, и ничего более, что в некоторых случаях является благословением, а в некоторых случаях означает большую работу - и сильно отличается от java. Основной целью исключений является прерывание нормального потока программы с throw
/catch
, и C++ делает именно это.
Если вы просто хотите простой строковый сообщение:
struct E: std::exception {
const char* msg;
E(const char* msg_): msg(msg_) {}
const char* what() const { return msg; }
};
// ...
throw E("invalid operation name");
Может быть, вы можете объяснить, что это Java, как утилита делает для тех из нас, кто не знаком с ним? – juanchopanza
Не знаком с Java, я не совсем понимаю этот вопрос. Что должно делать исключение, за исключением того, что вы выходите из основного потока? Различные типы исключений дают вам возможность выбирать, какие из них вы поймаете и какие из них распространяются, но для этого вам не нужны мелкозернистые классы. –
Я отредактировал вопрос, чтобы уточнить. Я чувствовал, что C++ просто отсутствовал в отделе исключения и что их исключения датированы ... комитету C++ нужно это сделать, на мой взгляд. Возможно, мелкие классы не нужны, но, осознавая неизбежность, я недовольна тем, что предлагает C++ и ищет советы по лучшей практике для создания моей собственной. – user633658