#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 }
|
1.3