структура std::hash< ara::core::Variant<
template <typename... Types> struct hash< ara::core::Variant< Types... > > {...};
Specialization of std::hash (hashing function for ara::core::Variant<Types...>)
| Header-Datei | #include "ara/core/variant.h" |
|---|---|
| Forwarding-Header | #include "ara/core/core_fwd.h" |
| Scope | namespace std |
Руководство пользователяСОЗДАНО ИИ
Обеспечивает использование типобезопасных вариантов в качестве ключей в неупорядоченных стандартных контейнерах через хэш-значения.
Обеспечивает использование типобезопасных вариантов в качестве ключей в неупорядоченных стандартных контейнерах через хэш-значения.
Специализация шаблона предоставляет хэш-функцию для типобезопасных типов объединений (union) для их беспрепятственного использования в ассоциативных хэш-контейнерах. Она действует как соответствующий стандарту функциональный адаптер, который считывает состояние экземпляра и преобразует его в однозначный хэш. Предварительным условием использования является возможность хэширования всех альтернативных типов, содержащихся в списке типов. При неизменном содержимом вычисление работает конкурентно-безопасно и без побочных эффектов.
Контекст
Специализация шаблона std::hash<ara::core::Variant<Types...>> расширяет стандартизированную систему хэширования стандартной библиотеки C++ для основного типа AUTOSAR Adaptive ara::core::Variant. Внутри модуля core ara::core::Variant функционирует как типобезопасное, оптимизированное по памяти объединение, которое в любой момент времени может содержать ровно один экземпляр из определенного списка альтернативных типов. Для возможности использования таких вариантных структур данных в качестве ключей в ассоциативных хэш-контейнерах, таких как std::unordered_map или std::unordered_set, строго необходима соответствующая специализация std::hash.
Таким образом, специализация обеспечивает непрерывную связь между функциональными требованиями AUTOSAR Adaptive Platform и обобщенными алгоритмами и контейнерами стандартной библиотеки. Она позволяет программным компонентам производительно индексировать, пересылать или кэшировать полиморфные структуры данных без динамических преобразований типов или пользовательских функторов-оберток.
Жизненный цикл
Жизненный цикл специализации хэша крайне лаконичен и опирается на соглашения стандартных функторов C++. Класс не имеет постоянных переменных состояния или связанных ресурсов. Поэтому создание выполняется тривиально через неявный конструктор по умолчанию, обычно непосредственно по месту использования в стеке или как временный объект в рамках операций с контейнером.
Поскольку специализация не имеет состояния, объект, вероятно, можно копировать и перемещать без ограничений. Вопрос Q-2cffd290e7f00968 (открытый) Уничтожение не требует явного освобождения ресурсов или логики деструктора. С точки зрения параллелизма вызов функтора потокобезопасен, если только хэшируемый экземпляр ara::core::Variant не модифицируется одновременно другим потоком выполнения. Несколько потоков могут одновременно использовать один и тот же экземпляр хэш-функтора или параллельные экземпляры без необходимости внешней синхронизации.
Путь использования
Типичное использование осуществляется косвенно через ассоциативные контейнеры стандартной библиотеки или напрямую через явный вызов оператора вызова operator(). Вариант использования начинается с предоставления инициализированного экземпляра ara::core::Variant, содержащего конкретное альтернативное значение.
При вызове хэш-функции запрашивается текущее состояние варианта. Вычисление, вероятно, происходит в два концептуальных этапа: сначала определяется дискриминатор или индекс текущего типа. Вопрос (открытый) Затем содержащееся в варианте конкретное значение передается подходящей специализации std::hash для этого типа. Наконец, индекс типа и хэш значения объединяются друг с другом для формирования результирующего хэш-значения типа std::size_t. Это гарантирует, что варианты с одинаковым альтернативным значением, но разной идентичностью типа надежно получают различные хэш-значения.
Сценарии ошибок
Надежность вычисления хэша существенно зависит от параметров шаблона и состояния переданного варианта. Фундаментальным предварительным условием является наличие работоспособной специализации std::hash для всех типов, объявленных в пакете параметров Types.... Если определение отсутствует хотя бы для одного типа, компиляция завершается ошибкой при инстанцировании хэш-функтора.
Во время выполнения метод предполагает, что переданный вариант не является недействительным. Если базовый объект варианта перешел в аварийное состояние незаполненности из-за предшествующего неудачного присваивания, поведение вычисления хэша, вероятно, не определено или приводит к исключению времени выполнения. Вопрос Q-d1e0b4858aa9dc16 (открытый) Кроме того, ожидается, что вычисление хэша отдельных альтернативных типов не генерирует исключений, чтобы удовлетворять требованиям к стандартным хэш-функциям.
Этот текст был сгенерирован ИИ на основе спецификации AUTOSAR R25-11.
UML-диаграмма классов
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал