structure 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 |
Guide utilisateurGÉNÉRÉ PAR IA
Permet l’utilisation de variants avec sûreté de typage comme clés dans des conteneurs standard non ordonnés par l’intermédiaire de valeurs de hachage.
Permet l’utilisation de variants avec sûreté de typage comme clés dans des conteneurs standard non ordonnés par l’intermédiaire de valeurs de hachage.
La spécialisation de template fournit une fonction de hachage pour les types d’unions avec sûreté de typage afin de pouvoir les employer de manière transparente dans des conteneurs associatifs à base de hachage. Elle agit comme un adaptateur de fonction conforme aux standards, qui lit l’état d’une instance et le transforme en une valeur de hachage univoque. La condition préalable à son utilisation est la hachabilité de tous les types alternatifs figurant dans la liste de types. Lorsque le contenu demeure inchangé, l’évaluation fonctionne de façon sûre en concurrence et sans effets de bord.
Contexte
La spécialisation de template std::hash<ara::core::Variant<Types...>> étend le framework de hachage standardisé de la bibliothèque standard C++ pour le type de base d’AUTOSAR Adaptive ara::core::Variant. Au sein du module core, ara::core::Variant fonctionne comme une union avec sûreté de typage et optimisée en mémoire, capable d’accueillir à tout moment exactement une instance issue d’une liste définie de types alternatifs. Pour pouvoir utiliser de telles structures de données variantes en tant que clés dans des conteneurs associatifs à base de hachage tels que std::unordered_map ou std::unordered_set, une spécialisation correspondante de std::hash est impérativement requise.
La spécialisation assure ainsi une médiation transparente entre les exigences fonctionnelles de l’AUTOSAR Adaptive Platform et les algorithmes et conteneurs génériques de la bibliothèque standard. Elle permet aux composants logiciels d’indexer, de transmettre ou de mettre en cache de manière performante des structures de données polymorphes sans conversions dynamiques de types ni foncteurs wrappers personnalisés.
Cycle de vie
Le cycle de vie de la spécialisation de hachage est extrêmement épuré et calqué sur les conventions des foncteurs standard de C++. La classe ne possède aucune variable d’état persistante ni ressource référencée. Sa création se fait donc de manière triviale via le constructeur par défaut implicite, typiquement directement sur la pile au point d’utilisation ou en tant qu’objet temporaire au sein des opérations du conteneur.
La spécialisation étant sans état, l’objet devrait pouvoir être copié et déplacé sans restriction. Question Q-2cffd290e7f00968 (ouverte) La destruction ne nécessite aucune libération explicite de ressources ni logique de destructeur. En matière de concurrence, l’appel du foncteur est thread-safe tant que l’instance de ara::core::Variant à hacher n’est pas modifiée simultanément par un autre fil d’exécution. Plusieurs threads peuvent utiliser concurremment la même instance du foncteur de hachage ou des instances parallèles sans qu’une synchronisation externe ne soit requise.
Parcours d'utilisation
L’utilisation typique a lieu indirectement par le biais des conteneurs associatifs de la bibliothèque standard ou directement via l’exécution explicite de l’opérateur d’appel operator(). Un cas d’utilisation débute par la fourniture d’une instance initialisée de ara::core::Variant contenant une valeur alternative concrète.
Lors de l’appel de la fonction de hachage, l’état actuel du variant est interrogé. Le calcul devrait s’effectuer en deux étapes conceptuelles : tout d’abord, le discriminateur ou l’indice du type actuellement contenu est déterminé. Question (ouverte) Ensuite, la valeur concrète contenue dans le variant est transmise à la spécialisation std::hash correspondante pour ce type. Enfin, l’indice de type et le hachage de la valeur sont combinés afin de produire la valeur de hachage résultante de type std::size_t. Cela garantit que des variants ayant une valeur alternative identique, mais une identité de type distincte, reçoivent de manière fiable des valeurs de hachage différentes.
Scénarios d'erreur
La robustesse du calcul de hachage dépend principalement des paramètres de template et de l’état du variant transmis. Une condition préalable fondamentale est qu’il existe une spécialisation fonctionnelle de std::hash pour l’ensemble des types déclarés dans le paquet de paramètres Types.... Si une telle définition manque pour ne serait-ce qu’un seul type, la compilation échoue dès que le foncteur de hachage est instancié.
À l’exécution, la méthode suppose que le variant transmis n’est pas invalide. Si l’objet variant sous-jacent devait se retrouver dans un état vide provoqué par une exception à la suite d’une affectation préalablement échouée, le comportement du calcul de hachage n’est probablement pas défini ou entraîne une exception à l’exécution. Question Q-d1e0b4858aa9dc16 (ouverte) De plus, il est attendu que le calcul de hachage des types alternatifs individuels ne lève pas d’exceptions, afin de satisfaire aux exigences applicables aux fonctions de hachage standard.
Ce texte a été généré par une IA sur la base de la spécification AUTOSAR R25-11.
Diagramme de classes UML
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Original allemand