#include "cexception.hpp"
#include <exception>
#include <typeinfo>
#include "stringbuf.hpp"
Функции | |
sh_ptr< CException > | toCException (const CException::FileLine &location) |
Данная функция перевозбуждает текущее исключение и возвращает созданный по нему sh_ptr<CException>. |
См. определение в файле cexception.cpp
|
Данная функция перевозбуждает текущее исключение и возвращает созданный по нему 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 } |