Титульная страница   Пространства имен   Иерархия классов   Алфавитный указатель   Классы   Файлы   Члены пространства имен   Члены классов   Члены файла  

Класс CException

Общий базовый класс для всех исключений проекта. Подробнее...

#include <cexception.hpp>

Граф наследования:CException:

ExampleCException ExternalCException STDExternalCException UnknownExternalCException Полный список членов класса

Открытые члены

virtual ~CException ()
 Виртуальный деструктор.

virtual std::string getClassName () const
 Возвращает имя класса-исключения.

virtual std::string toString () const
 Возвращает "полное описание" исключения, включающее имя класса и место возникновения.

std::string toStringAll () const
 Возвращает "полное описание" текущего исключения и всех исключений, вложенных в него.

template<class E> E * is ()
 Удобная функция для проверки является ли текущее исключение исключением класса E (или производным от него).

template<class E> const E * is () const
 Удобная функция для проверки является ли текущее константное исключение исключением класса E (или производным от него).

void * operator new (size_t size)
 Переопределенный для ускорения работы распределитель памяти.

void operator delete (void *ptr, size_t size)
 Переопределенный для ускорения работы распределитель памяти.


Открытые атрибуты

const FileLine location
 место возникновения исключения.

const std::string message
 сообщение

const sh_ptr< CException > nested
 указатель на вложенное исключение, причину текущего, или 0


Защищенные члены

 CException (const FileLine &loc, const std::string &msg, sh_ptr< CException > nest)
 Защищенный конструктор.


Закрытые члены

 CException (const CException &)
 запрещаем копирование.

CException & operator= (const CException &)
 запрещаем присваивание.


Друзья

sh_ptr< CException > newCException (const FileLine &loc, const std::string &msg, sh_ptr< CException > nest=sh_ptr< CException >())
 Предназначена для создания объектов вместо конструктора.


Подробное описание

Общий базовый класс для всех исключений проекта.

Все исключения должны возбуждаться в виде sh_ptr<CException>, который содержит указатель на собственно исключение, производное от CException. В принципе, отдельный производный класс исключений стоит создавать только в том случае, когда у пользователя должна быть возможность отличить его от "просто CException", а в остальный случаях вполне подойдет и сам CException, означающий: "обнаружена общего вида ошибка со следующим описанием".

См. определение в файле cexception.hpp строка 31


Конструктор(ы)

CException::CException const CException &   )  [private]
 

запрещаем копирование.

CException::CException const FileLine loc,
const std::string &  msg,
sh_ptr< CException >  nest
[protected]
 

Защищенный конструктор.

Для создания объектов необходимо использовать функцию newCException().

См. определение в файле cexception.cpp строка 22

00023                            : location(loc), message(msg), nested(nest)
00024 {
00025 }

CException::~CException  )  [virtual]
 

Виртуальный деструктор.

См. определение в файле cexception.cpp строка 27

00028 {
00029 }


Методы

std::string CException::getClassName  )  const [virtual]
 

Возвращает имя класса-исключения.

Должна обязательно переопределяться в производных классах.

Переопределяется в ExampleCException, ExternalCException, STDExternalCException и UnknownExternalCException.

См. определение в файле cexception.cpp строка 31

Используется в toString().

00032 {
00033  return "CException";
00034 }

template<class E>
const E* CException::is  )  const [inline]
 

Удобная функция для проверки является ли текущее константное исключение исключением класса E (или производным от него).

Возвращает ненулевой указатель запрашиваемого типа в случае положительного ответа.

См. определение в файле cexception.hpp строка 123

00123 { return dynamic_cast<const E*>(this); }

template<class E>
E* CException::is  )  [inline]
 

Удобная функция для проверки является ли текущее исключение исключением класса E (или производным от него).

Возвращает ненулевой указатель запрашиваемого типа в случае положительного ответа.

См. определение в файле cexception.hpp строка 115

00115 { return dynamic_cast<E*>(this); }

void CException::operator delete void *  ptr,
size_t  size
[inline]
 

Переопределенный для ускорения работы распределитель памяти.

Корректно работает и с производными классами.

См. определение в файле cexception.hpp строка 138

Перекрестные ссылки sized_alloc::free().

00139       {
00140        sized_alloc::free(ptr, size);
00141       }

void* CException::operator new size_t  size  )  [inline]
 

Переопределенный для ускорения работы распределитель памяти.

Корректно работает и с производными классами.

См. определение в файле cexception.hpp строка 129

Перекрестные ссылки sized_alloc::alloc().

00130       {
00131        return sized_alloc::alloc(size);
00132       }

CException& CException::operator= const CException &   )  [private]
 

запрещаем присваивание.

std::string CException::toString  )  const [virtual]
 

Возвращает "полное описание" исключения, включающее имя класса и место возникновения.

Должна переопределяться производными классами, имеющими дополнительные данные.

Переопределяется в ExternalCException.

См. определение в файле cexception.cpp строка 36

Перекрестные ссылки CException::FileLine::fname, getClassName(), CException::FileLine::line, location и message.

Используется в toStringAll().

00037 {
00038  return StringBuf()+getClassName()+" ["+location.fname+":"+location.line+"]: "+
00039    message;
00040 }

std::string CException::toStringAll  )  const
 

Возвращает "полное описание" текущего исключения и всех исключений, вложенных в него.

Фактически, результаты применения toString() к каждому из исключений объединяются в одну строку.

См. определение в файле cexception.cpp строка 42

Перекрестные ссылки sh_ptr< CException >::get(), nested и toString().

00043 {
00044  string ret;
00045  ret.reserve(1024);
00046 
00047  for (const CException* ptr=this; ptr; ptr=ptr->nested.get()) {
00048      ret.append(ptr->toString());
00049      ret.push_back('\n');
00050  }
00051 
00052  return ret;
00053 }


Документация по друзьям класса и функциям отноносящихся к классу

sh_ptr<CException> newCException const FileLine loc,
const std::string &  msg,
sh_ptr< CException >  nest = sh_ptr<CException>()
[friend]
 

Предназначена для создания объектов вместо конструктора.

Создает объект в свободной памяти по переданным месту исключения, сообщению и, возможно, вложенному исключению. Для передачи объекта loc удобно использовать макрос _FLINE_.

См. определение в файле cexception.hpp строка 281

00283 {
00284  return sh_ptr<CException>(new CException(loc, msg, nest));
00285 }


Данные класса

const FileLine CException::location
 

место возникновения исключения.

См. определение в файле cexception.hpp строка 69

Используется в ExternalCException::toString() и toString().

const std::string CException::message
 

сообщение

См. определение в файле cexception.hpp строка 71

Используется в ExternalCException::toString() и toString().

const sh_ptr<CException> CException::nested
 

указатель на вложенное исключение, причину текущего, или 0

См. определение в файле cexception.hpp строка 73

Используется в toStringAll().


Объявления и описания членов классов находятся в файлах:
Документация по ftext. Последние изменения: Sat Mar 20 17:58:15 2004. Создано системой doxygen1.3