Инкапсулирует коды ошибок State Management для передачи и обработки критических функциональных сбоев в виде исключения C++.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 72647117def3ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Инкапсулирует коды ошибок State Management для передачи и обработки критических функциональных сбоев в виде исключения C++.
Класс ara::sm::SmException служит для передачи исключительных ситуаций, возникающих при операциях State Management [SWS_SM_81242]. Он является производным от ara::core::Exception и инкапсулирует специфический ara::core::ErrorCode для точной идентификации возникшей причины ошибки. Его создание осуществляется через явный конструктор, который специфицирован как потокобезопасный и безопасный относительно исключений [SWS_SM_81243]. Вызывающие приложения структурированно перехватывают объект, чтобы проанализировать содержащийся код ошибки и инициировать соответствующие меры по восстановлению.
Контекст
Класс ara::sm::SmException функционирует как центральное исключение для функционального кластера State Management в AUTOSAR Adaptive Platform [SWS_SM_81242]. Он определен в заголовочном файле ara/sm/sm_error_domain.h и открыто наследуется от фундаментального базового класса исключений платформы ara::core::ExceptionAUTOSAR_AP_SWS_StateManagement §8.1.4 «Class: SmException». Внутри документа спецификация класса приводится со статусом DRAFT [SWS_SM_81242].
В архитектурном контексте класс объединяет три центральные роли: State Management как инициирующую инстанцию при сбоях операций над состоянием, вызывающее приложение Adaptive в качестве обработчика и базовую инфраструктуру ara::core, предоставляющую общий интерфейс для обработки ошибок. Являясь носителем ошибочных состояний, он служит для синхронной передачи ошибочных ситуаций из модуля sm вышестоящим контролирующим инстанциям через механизм исключений C++.
Жизненный цикл
Инстанцирование ara::sm::SmException осуществляется явно через конструктор SmException(ara::core::ErrorCode errorCode)[SWS_SM_81243]. Этот конструктор объявлен как noexcept и обладает свойствами как безопасности относительно исключений (exception safe), так и потокобезопасности (thread-safe) AUTOSAR_AP_SWS_StateManagement §8.1.4.1.1.1 «SmException». Благодаря этому гарантируется, что само создание объекта исключения не завершится сбоем и не вызовет дальнейших исключений, даже если оно создается в параллельных контекстах исполнения.
После создания экземпляр обычно генерируется по значению (by value) и перехватывается в вызывающем контексте как ссылка на константные объекты (const ara::sm::SmException& или полиморфно как const ara::core::Exception&). Поскольку спецификация не задает специальных деструкторов или ручных процедур очистки, уничтожение объекта исключения, согласно интерпретации, полностью следует стандартной семантике C++ и механизмам базового класса ara::core::Exception, как только осуществляется выход из соответствующего блока обработки. Вопрос Q-85b1fd2f6082db8e (открытый)
Путь использования
Типичный сценарий начинается с компонента приложения или платформы, который направляет запрос на управление состоянием в State Management. Если запрошенное изменение состояния не может быть выполнено внутренне или возникла тяжелая исключительная ошибка, State Management инстанцирует экземпляр ara::sm::SmException с указанием соответствующего ara::core::ErrorCode[SWS_SM_81243].
Диаграмма последовательности: типичная сигнализация и обработка ошибки с помощью SmException в State Management. Источники: [SWS_SM_81242], [SWS_SM_81243].
Вызывающий компонент перехватывает сгенерированное исключение в соответствующем блоке catch. С помощью методов, унаследованных от базового класса ara::core::Exception, приложение может проверить инкапсулированный ara::core::ErrorCode, чтобы семантически сопоставить причину ошибки и предпринять целенаправленные меры по ее устранению или восстановлению состояния системы.
Сценарии ошибок
Класс ara::sm::SmException сам по себе не представляет собой подверженный ошибкам операционный элемент, а является первичным объектом-носителем исключительных ситуаций в State Management [SWS_SM_81242]. Важным предварительным условием для создания является предоставление инициализированного объекта ara::core::ErrorCode при вызове конструктора [SWS_SM_81243].
Если выброшенное исключение ara::sm::SmException не перехватывается ни одним подходящим обработчиком в стеке вызовов, это, согласно стандартным правилам C++, приводит к вызову std::terminate и тем самым к неконтролируемому аварийному завершению затронутого процесса. В реализациях, предписывающих отказ от исключений в пользу ara::core::Result, выброс исключения предотвращается; однако если путь исключений доступен, инкапсуляция обеспечивает передачу исходного кода ошибки для диагностики без искажений.
Данное руководство по классу основано на спецификации AUTOSAR Adaptive R25-11. Все сведения опираются на указанные пункты спецификации.
UML-диаграмма классов
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал