Определяет домен ошибок модуля персистентности для предоставления кодов ошибок, текстовых описаний и исключений.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: da81ed3d3cb6ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Определяет домен ошибок модуля персистентности для предоставления кодов ошибок, текстовых описаний и исключений.
Класс ara::per::PerErrorDomain определяет домен ошибок для модуля персистентности и связывает коды ошибок с описательными сообщениями, а также с типами исключений [SWS_PER_00411]. Через потокобезопасные интерфейсы он позволяет запрашивать имя домена и сопоставлять описания ошибок с конкретными значениями ошибок. При необходимости он преобразует ошибки в исключения C++ через ThrowAsException()[SWS_PER_00350]. Если исключения отключены в тулчейне компилятора, эта функция генерации недоступна, поэтому проверка ошибок должна выполняться исключительно на основе возвращаемых значений.
Контекст
Класс ara::per::PerErrorDomain определяет специфический домен ошибок для модуля персистентности (Persistency) в рамках AUTOSAR Adaptive Platform. Он наследует от определения базового типа ara::core::ErrorDomain и объявлен как final, являясь основой для типизированной обработки ошибок и отображения ошибок всех операций, связанных с персистентностью. Через стандартизированные псевдонимы типов Errc[SWS_PER_00411] для базового перечисления кодов ошибок PerErrc, а также Exception[SWS_PER_00412] для базового класса исключений конкретного модуля PerException, класс связывает числовые значения ошибок, понятные сообщения об ошибках и конкретные объекты исключений C++. В архитектуре платформы домен ошибок тесно взаимодействует со службами персистентности, вызывающими функциональными кластерами, а также с обобщёнными структурами ошибок и результатов из ara::core.
Жизненный цикл
Создание экземпляра выполняется через стандартный конструктор PerErrorDomain()[SWS_PER_00313]. Этот конструктор объявлен как noexcept, полностью безопасен относительно исключений (exception safe) и потокобезопасен (thread-safe). Интерпретация: экземпляр PerErrorDomain, вероятно, обычно управляется как долгоживущий или глобальный объект, чтобы на протяжении всей работы гарантировать согласованное сравнение доменов и разрешение типов для ошибок персистентности. Вопрос Q-5d90982fddec40a7 (открытый) Поскольку все операции запроса класса также классифицируются как потокобезопасные, несколько потоков могут параллельно обращаться к одному и тому же экземпляру домена без необходимости использования дополнительных механизмов синхронизации на уровне вызывающей стороны.
Путь использования
Типичный сценарий использования включает идентификацию домена, запрос понятной диагностической информации и, опционально, генерацию исключений при возникновении ошибок в модуле персистентности. Сначала функция-член Name() возвращает уникальный идентификатор домена ошибок в виде строки [SWS_PER_00314]; она специфицирована как noexcept, безопасная относительно исключений и потокобезопасная. При возникновении ошибки во время операции персистентности её числовое значение ошибки разрешается через Message()[SWS_PER_00315]. Этот метод принимает числовой код ошибки типа CodeType и возвращает соответствующее сообщение об ошибке в виде константного указателя на символ (const char *), также с гарантией полной безопасности относительно исключений и потокобезопасности.
Если состояние ошибки требуется преобразовать в исключение C++, используется функция ThrowAsException()[SWS_PER_00350]. Следующая последовательность иллюстрирует взаимодействие при запросе ошибок и генерации исключений:
Диаграмма последовательности: типичный процесс проверки ошибок, запроса текста и генерации исключений через PerErrorDomain. Источники: [SWS_PER_00314], [SWS_PER_00315], [SWS_PER_00350].
Сценарии ошибок
При практическом применении ara::per::PerErrorDomain разработчики должны учитывать различные гарантии относительно обработки ошибок и безопасности исключений. В то время как опрашивающие интерфейсы Name()[SWS_PER_00314] и Message()[SWS_PER_00315] строго объявлены как noexcept и классифицируются как безопасные относительно исключений, функция-член ThrowAsException() считается небезопасной относительно исключений (not exception safe) [SWS_PER_00350]. Такое поведение семантически обосновано, так как назначение функции состоит в контролируемой генерации исключения, соответствующего коду ошибки (noexcept(false)).
Существенное граничное условие касается платформ или конфигураций сборки без активированных исключений C++: если обработка исключений отключена в компиляторе, ThrowAsException() в соответствии с [SWS_PER_00350] не участвует в разрешении перегрузки. В таких окружениях прикладное программное обеспечение должно прибегать к анализу кодов ошибок через предоставленные псевдонимы Errc[SWS_PER_00411] и текстовые описания Message()[SWS_PER_00315] вместо перехвата объектов исключений типа Exception[SWS_PER_00412].
Настоящее руководство было автоматически сформировано на основе требований спецификации AUTOSAR.
Throws the exception associated with the error code. As per [SWS_CORE_10304], this function does not participate in overload resolution when C++ exceptions are disabled in the compiler toolchain.
Throws the exception associated with the error code. As per [SWS_CORE_10304], this function does not participate in overload resolution when C++ exceptions are disabled in the compiler toolchain.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал