исключение — наличие опции кодов ошибок в библиотеке C ++ для производительности

Я написал C ++ File Library, в которой есть коды исключений и ошибок. Исключения могут быть отключены во время работы программы. В этом случае пользователь должен проверить коды ошибок. Конечно, когда выброшено исключение, код ошибки не будет возвращен, потому что исключение выдается до возврата вызванной функции. В настоящее время исключения все еще могут быть выброшены при отключении (ошибка). Я исправлю это в ближайшее время. Кто-то сказал мне, что считается плохим дизайном иметь коды исключений и ошибок. Я согласен с ним, и я собираюсь удалить коды ошибок и сделать так, чтобы библиотека генерировала пользовательские исключения с дополнительной информацией об ошибках. Но я стесняюсь. Мне нравится иметь этот гибридный подход по соображениям производительности. Это то, что я думаю сделать: сохранение исключений и кодов ошибок, но исключение исключается через макрос во время компиляции, а не во время выполнения.

Если пользователь определит следующее в общем конфигурационном файле

#define ELMAX_EXCEPTION 1

Следующий код

int Write(std::wstring str) ELMAX_THROW_OR_NOT;

будет расширяться до любого из 2.

// under C++11 compiler
int Write(std::wstring str) noexcept;

// under C++98 compiler
int Write(std::wstring str) throw();

Если ELMAX_EXCEPTION не определен или равен нулю, макрос будет расширяться до нуля.

int Write(std::wstring) ;

Причина, по которой я хочу это сделать, заключается в том, что для пользователя библиотеки, который хочет выиграть в производительности, не имея компилятора, генерирующего код раскрутки стека (для исключения), и компилятор может лучше оптимизировать такие функции. Моя библиотека файлов C ++ использует API файлов C, и единственное, что может вызвать исключение, это новое ключевое слово, которое я намереваюсь добавить nothrow, Код UTF-8 также может выдавать исключения (также необходимо изменить)

char *parr = new (nothrow) char[num];

if(parr==NULL)
// handle it either through error code or throw exception (if enabled)

Пожалуйста, посоветуйте мне, если у меня должен быть чистый подход исключения или гибридный подход (как упомянуто), для моих ошибок библиотеки. Спасибо.

1

Решение

Это зависит от того, что вы хотите сделать с библиотекой. Очевидно, что исключения лучше с точки зрения дизайна, но это правда, что они часто отключаются для некоторых видов приложений (таких как иммерсивные 3D-игры).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]