Классы-оболочки очень компактны, обычно они имеют размер одного или двух указателей. Поэтому в функциях можно возвращать сами классы-оболочки, а не ссылки на них, не сильно проигрывая в эффективности.
Для обработки ошибочных ситуаций применяются три механизма, включение которых определяется макросами MA_USE_EXCEPTIONS и MA_CLASS_EXCEPTIONS.
- (MA_USE_EXCEPTIONS не определен) сохранение кода ошибки в
глобальной переменной, из которой его можно прочитать с помощью функции
HRESULT maGetLastError()
- (MA_USE_EXCEPTIONS определен, MA_CLASS_EXCEPTIONS не определен) Возбуждение исключений (C++ exceptions) типа int со значением, равным коду ошибки.
В примере показано, как можно обрабатывать исключения.
try{ CmaIndex sz; CmaMatrix X(MA_DOUBLE, sz[168][7]); // работа с матрицей }catch(int eCode){ // сюда попадаем, только если произошла ошибка printf("Код ошибки= %x\n",eCode); //... Другие действия }
- (MA_USE_EXCEPTIONS и MA_CLASS_EXCEPTIONS определены)
Возбуждение исключений (C++ exceptions) типа CmaException.
class CmaException{ public: int maLastError; // код ошибки char* fileName; // имя файла, в котором произошла ошибка (maComClasses.h или maComClasses.cpp) int lineNo; // номер строки, в которой произошла ошибка CmaException(int m_maLastError,int m_lineNo,char* m_fileName); // копирует свои параметры в поля класса };
В примере показано, как в этом случае обрабатывать исключения.try{ CmaIndex sz; CmaMatrix X(MA_DOUBLE, sz[168][7]); // работа с матрицей }catch(CmaException* E){ // сюда попадаем, только если произошла ошибка printf("Ошибка на строке %d файла <%s> с кодом %x\n",E->lineNo,E->fileName,E->maLastError); //... Другие действия }