DEENESPTFRRUARHIKOZHNL

命名空间 std

用户指南人工智能生成

允许将 ara::core 类型集成到 C++ 标准库的标准容器和语言工具中。
AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: e52b54851dc1 来源 未决问题(3)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

允许将 ara::core 类型集成到 C++ 标准库的标准容器和语言工具中。

命名空间 std 在模块 core 中为 AUTOSAR Adaptive Platform 的数据类型提供 std::hash、std::tuple_size 和 std::tuple_element 的模板特化。这使得可以直接在标准容器中以及结合 C++ 元组语言工具来使用诸如 ara::core::String、ara::core::Optional、ara::core::Variant、ara::core::Vector 和 ara::core::Array 等类型。约束条件是:对于嵌套类型,所包含的数据类型在编译时也必须具有有效的特化。

上下文

在 AUTOSAR Adaptive Platform 的模块 core 中,命名空间 std 用于将平台特定的基础类型无缝集成到 C++ 标准库中。该命名空间并非引入新类型,而是提供标准化辅助类的针对性模板特化。交互伙伴包括三个基本组件:C++ 标准库的泛型类型(特别是非序关联容器和元组辅助工具)、std 内的模板特化以及在模块 core 中定义的数据类型 ara::core::Array、ara::core::Monostate、ara::core::Optional、ara::core::String、ara::core::StringView、ara::core::Variant 和 ara::core::Vector。

std_context app 标准容器和语言特性 (例如 std::unordered_map、结构化绑定) std_spec Spezialisierungen in namespace std (std::hash, std::tuple_size, std::tuple_element) app->std_spec 使用 ara_types ara::core Datentypen (Array, Optional, String, StringView, Variant, Vector, Monostate) std_spec->ara_types 包含

上下文图:标准容器、std 中的特化与 ara::core 类型之间的相互作用。来源:core 模块的有效负载声明

std::hash 的特化使得可以直接将自适应核心数据类型用作标准容器(如 std::unordered_map 或 std::unordered_set)中的键。与此同时,针对 ara::core::Array 的特化 std::tuple_size 和 std::tuple_element 扩展了对标准化元编程接口和语言工具的支持。

使用路径

典型使用路径始于在泛型 C++ 代码中使用 ara::core 数据类型。例如,应用程序声明一个键类型为 ara::core::String 或 ara::core::Optional<T> 的哈希表。在插入、删除或查找时,容器会隐式访问 std::hash<ara::core::String> 或 std::hash<ara::core::Optional<T>> 以确定键的哈希值。

这些特化涵盖了不同的数据结构:

  • 字符串和视图:std::hash<ara::core::String> 和 std::hash<ara::core::StringView> 计算所包含字符序列的哈希值。
  • 复合类型:std::hash<ara::core::Optional<T>>、std::hash<ara::core::Variant<...>> 和 std::hash<ara::core::Vector<T, Allocator>> 支持对复杂类型结构进行哈希计算。解释:针对 ara::core::Optional 和 ara::core::Variant 的特化推测以标准化原型的语义行为为导向,并为空状态或未占用状态生成确定性值。 问题 Q-c432b06f0ba32c5e (未决)
  • 无状态类型:std::hash<ara::core::Monostate> 为空状态提供哈希函数,正如它们通常在变体类型中所使用的那样。
  • 元组协议:对于固定数据字段,std::tuple_size<ara::core::Array<T, N>> 在编译时提供元素数量,而 std::tuple_element<I, ara::core::Array<T, N>> 确定位置 I 的数据类型。解释:std::tuple_size 和 std::tuple_element 的特化推测由此允许将 ara::core::Array 与结构化绑定(Structured Bindings)结合使用。 问题 Q-3abb70390e67dbce (未决)

错误场景

由于命名空间 std 中的元素完全是模板特化,因此错误场景主要发生在编译时。典型的问题情况包括:

  • 基础类型缺少哈希能力:如果为嵌套类型(如 ara::core::Optional<T> 或 ara::core::Vector<T, Allocator>)实例化 std::hash,则元素类型 T 也必须存在 std::hash 的有效特化。如果缺少该特化,将导致编译错误。
  • 元组协议中的无效索引:使用索引 I >= N 访问 std::tuple_element<I, ara::core::Array<T, N>> 违反了模板的前置条件并会中止编译过程。

解释:错误场景推测基本上局限于不完整类型特化或静态越界时的编译时错误,因为规范摘录中未定义任何运行时错误代码或异常接口。 问题 Q-8cda269c72bd701c (未决)

本指南仅基于 core 模块针对 Release R25-11 声明的类特化。

主题图

类图

Abgerundete Rahmen = Namespace- bzw. Klassen-Scopes; hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); graue Boxen = namespace-fremde bzw. externe Basisklassen. Klicken öffnet die jeweilige Klassen- bzw. cppreference-Seite.

G cluster_ns std nstd__hash__ara__core__Monostate__ «struct» hash< ara::core::Monostate > nstd__hash__ara__core__Optional__T__ «struct» hash< ara::core::Optional< T > nstd__hash__ara__core__Optional__T____ hash< ara::core::Optional< T > > nstd__hash__ara__core__String__ «struct» hash< ara::core::String > nstd__hash__ara__core__StringView__ «struct» hash< ara::core::StringView > nstd__hash__ara__core__Variant_ «struct» hash< ara::core::Variant< nstd__hash__ara__core__Variant__Types_______ hash< ara::core::Variant< Types... > > nstd__hash__ara__core__Vector__T__Allocator____ «struct» hash< ara::core::Vector< T, Allocator > > nstd__tuple_element__I__ara__core__Array__T__N____ «struct» tuple_element< I, ara::core::Array< T, N > > nstd__tuple_size__ara__core__Array__T_ «struct» tuple_size< ara::core::Array< T, next_integral__constant__size_t__N__ integral_ constant< size_t, N > nstd__tuple_size__ara__core__Array__T_->next_integral__constant__size_t__N__

详细视图

请在大纲中选择一个条目。

类

≙ [array]

≙ [array]