Можно ли использовать std :: error_category с динамическими сообщениями?

Я разрабатываю библиотеку, которая взаимодействует с удаленной системой, и хотя она возвращает конечное и известное количество кодов ошибок, сообщения могут изменяться непредсказуемым образом.

Так что я исследование std::error_code как способ предоставить пользователям моей библиотеки способ обработки ошибок, свойственных C ++, вместо развертывания собственного кода. Я не могу бросать исключения.

Учебники на использование std::error_category всегда показывать, что статический экземпляр используется с жестко закодированными сообщениями, возвращаемыми в зависимости от кода ошибки.

Но что, если у нас есть динамические сообщения, которые нельзя кэшировать? Как мы можем связать конкретное сообщение с конкретным экземпляром std::error_code?

3

Решение

Короткий ответ: вы не можете этого сделать.

error_code предназначен для копирования типа значения. Если бы пользовательские сообщения были разрешены, копирование ошибки потребовало бы глубокого копирования данных сообщения или ведения подсчета ссылок.

Это сделало бы коды ошибок слишком тяжелыми для использования во многих внутренних циклах приложений / библиотек, в основном вынуждая программистов использовать другой механизм обработки ошибок для этой части кода, рендеринг error_code по сути бессмысленно.

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

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector