#include <string>
#include "config.hpp"
#include "sh_ptr.hpp"
Классы | |
class | CException |
Общий базовый класс для всех исключений проекта. Подробнее... | |
struct | CException::FileLine |
Структура для инкапсуляции информации о месте возникновения исключения. Подробнее... | |
class | ExternalCException |
Общий базовый класс для инкапсуляции исключений, являющихся внешними по отношению к иерархии, порождаемой CException. Подробнее... | |
class | STDExternalCException |
Исключение для инкапсуляции std::exception и классов, производных от него. Подробнее... | |
class | UnknownExternalCException |
Исключение для информирования о внешнем исключении, тип которого не удалось определить. Подробнее... | |
Макросы | |
#define | _FLINE_ CException::FileLine(__FILE__, __LINE__) |
Макрос для упрощения создания объекта CException::FileLine. | |
Функции | |
sh_ptr< CException > | toCException (const CException::FileLine &location) |
Данная функция перевозбуждает текущее исключение и возвращает созданный по нему sh_ptr<CException>. | |
sh_ptr< CException > | newCException (const CException::FileLine &loc, const std::string &msg, sh_ptr< CException > nest) |
sh_ptr< CException > | newExternalCException (const CException::FileLine &loc, const std::string &msg, const std::string &tname, sh_ptr< CException > nest) |
sh_ptr< CException > | newSTDExternalCException (const CException::FileLine &loc, const std::string &msg, const std::string &tname, sh_ptr< CException > nest) |
sh_ptr< CException > | newUnknownExternalCException (const CException::FileLine &loc, const std::string &msg, const std::string &tname, sh_ptr< CException > nest) |
См. определение в файле cexception.hpp
|
Макрос для упрощения создания объекта CException::FileLine.
См. определение в файле cexception.hpp строка 278 Используется в FindFileImpl::find(), FindTextImpl::found(), Logger::Logger(), Factory::newFindFile(), Factory::newFindText(), Factory::newNameMatcher(), Factory::newTextFinder(), FindTextImpl::search() и FindTextImpl::stopSearch(). |
|
Создает объект в свободной памяти по переданным месту исключения, сообщению и, возможно, вложенному исключению. Для передачи объекта loc удобно использовать макрос _FLINE_. См. определение в файле cexception.hpp строка 281 Используется в FindFileImpl::find(), FindTextImpl::found(), Logger::Logger(), Factory::newFindFile(), Factory::newFindText(), Factory::newNameMatcher(), Factory::newTextFinder(), FindTextImpl::search() и FindTextImpl::stopSearch().
00283 { 00284 return sh_ptr<CException>(new CException(loc, msg, nest)); 00285 } |
|
Данная функция перевозбуждает текущее исключение и возвращает созданный по нему sh_ptr<CException>. Она может быть вызвана только из блока catch. Для передачи объекта location удобно использовать макрос _FLINE_. Если используемая платформа предоставляет дополнительные (нестандартные) возможности для получения более подробной информации о перехваченных исключениях неизвестного типа, то имеет смысл написать специальную реализацию данной функции, использующую эти возможности. См. определение в файле cexception.cpp строка 106 Используется в FindFileImpl::find(), FindTextImpl::found(), Factory::newFindFile(), Factory::newFindText(), Factory::newNameMatcher(), Factory::newTextFinder() и FindTextImpl::search().
00107 { 00108 #ifndef DERS_RETHROW_BUG // нормальная версия 00109 try { throw; } 00110 catch (sh_ptr<CException> ce) { 00111 return ce; 00112 } 00113 catch (const exception& e) { 00114 return newSTDExternalCException(location, e.what(), typeid(e).name()); 00115 } 00116 catch (...) { 00117 return newUnknownExternalCException(location, "Unknown exception", 00118 "unknown"); 00119 } 00120 #else // версия для компиляторов с ошибками 00121 if (CException::current.refs()>1 && CException::current.get()) 00122 return CException::current; 00123 00124 return newUnknownExternalCException(location, "Unknown exception", "unknown"); 00125 #endif 00126 } |