Обработка исключений в C++ DLL
Это скорее дизайнерское предложение, которое я хочу услышать от экспертов по C++ здесь.
У меня есть библиотека DLL C++ в среде IDE VS 2015. Я хочу добавить больше обработки исключений в этот код.
В настоящее время существует следующая функция.
void Metrics::GetNumbers(InputParams* input, OutputParams* output) { int i, x, k; int status = 0; char* mesg; ............; ............; try{ const char* name = input->getName(&status, &mesg); //this returns a name string and status will contain whether success or failure and mesg will have any error messages. const char* age = input->getAge(&status, &mesg); ..............................................; ..............................................; vector <int> myVectorNumers = input->getNumberArray(&status, &mesg); vector <int> myVectorInfos = input->getInfoArray(&status, &mesg); ...............................................................; } catch (std::exception e&) { // TODO } catch (...) { // TODO }
Приведенный выше код находится в DLL. И вход это указатель, указывающий на клиент, вызывающий эту библиотеку DLL. Таким образом, DLL запрашивает у клиента определенную информацию, как указано выше.
Он дает информацию в качестве возврата к этим вызовам, а также статус, и mesg также будет содержать информацию о том, были ли эти вызовы успешными.
Ни одна из клиентских функций (getName, getAge,...) не возвращает исключение, и мне нужно справиться с этим самому.
Я мог бы справиться с этим исключением после каждого звонка клиенту.
Что я уже пробовал:
Что-то вроде этого,
const char* age = input->getAge(&status, &mesg); std::exception ex; if (age == NULL || status == ERROR) { throw ex; }Я должен добавить, если условие после каждого вход вызов. Вместо этого в идеале это должна быть другая функция, которая проверит, является ли указатель нулевым, а статус-ошибкой, а затем вернет исключение.
Так что в основном я имею в виду более совершенный код, а не дублирование одних и тех же строк несколькими строками внутри одной и той же функции.
В идеальном сценарии код должен быть таким,
const char* name = input->getName(&status, &mesg); CheckException(name, status); //this function should return an exception if either name or status fails. const char* age = input->getAge(&status, &mesg); CheckException(age, status); //this function should return an exception if either age or status fails.Я не знаю, как спроектировать что-то подобное. Я был бы признателен, если бы кто-нибудь подал мне несколько идей.