struct 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 |
User GuideAI-GEGENEREERD
Maakt het gebruik van typeveilige varianten als sleutel in ongeordende standaardcontainers mogelijk via hashwaarden.
Maakt het gebruik van typeveilige varianten als sleutel in ongeordende standaardcontainers mogelijk via hashwaarden.
De template-specialisatie biedt een hashfunctie voor typeveilige union-typen om deze naadloos te kunnen gebruiken in associatieve hash-containers. Deze fungeert als standaardconforme functie-adapter die de toestand van een instantie uitleest en omzet in een unieke hashwaarde. Voorwaarde voor gebruik is dat alle alternatieve typen in de typenlijst hashbaar zijn. Bij ongewijzigde inhoud werkt de evaluatie gelijktijdigheidsveilig en vrij van neveneffecten.
Context
De template-specialisatie std::hash<ara::core::Variant<Types...>> breidt het gestandaardiseerde hashing-framework van de C++-standaardbibliotheek uit voor het AUTOSAR Adaptive-kerntype ara::core::Variant. Binnen de module core fungeert ara::core::Variant als typeveilige, geheugen-geoptimaliseerde union die op elk moment precies één instantie uit een gedefinieerde lijst van alternatieve typen kan bevatten. Om dergelijke variante datastructuren te kunnen inzetten als sleutel in associatieve hash-containers zoals std::unordered_map of std::unordered_set, is een overeenkomstige specialisatie van std::hash strikt noodzakelijk.
De specialisatie bemiddelt aldus naadloos tussen de functionele eisen van het AUTOSAR Adaptive Platform en de generieke algoritmen en containers van de standaardbibliotheek. Deze stelt softwarecomponenten in staat polymorfe datastructuren performant te indexeren, door te geven of te cachen zonder dynamische typeconversies of aangepaste wrapper-functoren.
Levenscyclus
De levenscyclus van de hash-specialisatie is uiterst slank en geënt op de conventies van C++-standaardfunctoren. De klasse bezit geen persistente toestandsvariabelen of gereferentieerde bronnen. Het aanmaken vindt daarom triviaal plaats via de impliciete standaardconstructor, doorgaans direct op de plaats van gebruik op de stack of als tijdelijk object binnen containeroperaties.
Aangezien de specialisatie toestandloos is, is het object vermoedelijk onbeperkt kopieerbaar en verplaatsbaar. Vraag Q-2cffd290e7f00968 (open) De vernietiging vereist geen expliciete vrijgave van bronnen of destructorlogica. Wat betreft gelijktijdigheid is de aanroep van de functor thread-safe, zolang de te hashen ara::core::Variant-instantie niet gelijktijdig door een andere thread wordt gewijzigd. Meerdere threads kunnen dezelfde instantie van de hashfunctor of parallelle instanties gelijktijdig gebruiken, zonder dat externe synchronisatie noodzakelijk is.
Gebruikspad
Het typische gebruik vindt indirect plaats via associatieve containers van de standaardbibliotheek of direct via de expliciete uitvoering van de call-operator operator(). Een use-case begint met de beschikbaarstelling van een geïnitialiseerde instantie van ara::core::Variant die een concrete alternatieve waarde bevat.
Bij het aanroepen van de hashfunctie wordt de actuele toestand van de variant opgevraagd. De berekening verloopt vermoedelijk in twee conceptuele deelstappen: eerst wordt de discriminator respectievelijk index van het actueel aanwezige type bepaald. Vraag (open) Vervolgens wordt de in de variant opgenomen concrete waarde doorgegeven aan de passende std::hash-specialisatie van dit type. Ten slotte worden de type-index en de waarde-hash met elkaar gecombineerd om de resulterende hashwaarde van het type std::size_t te genereren. Dit waarborgt dat varianten met een identieke alternatieve waarde, maar verschillende type-identiteit, betrouwbaar verschillende hashwaarden krijgen.
Foutscenario's
De robuustheid van de hashberekening hangt in sterke mate af van de template-parameters en de toestand van de doorgegeven variant. Een fundamentele voorwaarde is dat voor alle in het parameterpakket Types... gedeclareerde typen een functionele specialisatie van std::hash bestaat. Ontbreekt voor ook maar één enkel type een dergelijke definitie, dan mislukt de compilatie zodra de hashfunctor wordt geïnstantieerd.
Tijdens runtime vereist de methode dat de doorgegeven variant niet ongeldig is. Mocht het onderliggende variantobject door een eerder mislukte toewijzing in een uitzonderingsgerelateerde leegtoestand zijn geraakt, dan is het gedrag van de hashberekening vermoedelijk niet gedefinieerd of leidt dit tot een runtime-exceptie. Vraag Q-d1e0b4858aa9dc16 (open) Bovendien wordt verwacht dat de hashberekening van de individuele alternatieve typen geen excepties opwerpt, om te voldoen aan de eisen voor standaard-hashfuncties.
Deze tekst is gegenereerd door een AI op basis van de AUTOSAR-specificatie R25-11.
UML-klassendiagram
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Duits origineel