把好豆子都捡到小盆里,坏豆子都吃到嘴里。
您可能很熟悉《灰姑娘》这个故事中,灰姑娘的继姐妹们用分拣豌豆的方法来欺负她的场景。虽然我们知道结构和秩序可以使我们的工作变得更加轻松,但对我们许多人来说,分类和整理实在是一件苦差事。在C++中,可以使用命名空间来组织相互从属的代码元素,从而对代码进行模块化。此秩序使开发人员在对函数、类别或变量的命名方面拥有更大的自由空间,因为它可确保这些东西只有在各自的命名空间中才能够被理解,不会出现歧义。特别是在高度分布式的开发过程中,不同软件组件中的名称歧义可能导致直到集成阶段后期才能发现的问题。在这篇博文中,我们将介绍当前如何在TargetLink中使用命名空间,以及TargetLink 2023-B将发布哪些有趣的新功能。
第一:含义
在C++中,命名空间使用命名空间关键字进行定义。命名空间关键字后跟大括号,界定其中包含符号的范围,即类型、函数或变量。您可以嵌套命名空间,以创建表示代码模块化架构的层次结构。如图1所示,为了对命名空间的符号进行寻址,请在符号前面加上名称空间名称。
第二:原因
很多人可能都知道,C++是Adaptive AUTOSAR标准的编程语言。Adaptive AUTOSAR面向服务的架构在应对汽车领域未来的挑战方面具有很多优势,例如,自动驾驶、车辆连通性,或使用高性能控制器(HPC)。Adaptive AUTOSAR标准及其相关的编码指引促使用户使用命名空间,因为它们支持结构化、模块化和受控开发,从而提高灵活性、可扩展性和耐用性。
第三:方法
在TargetLink中创建和管理命名空间是在TargetLink Data Dictionary(DD)中进行的,并且与其他数据中创建和管理命名空间一样方便。您可以在Pool区域创建命名空间和自定义命名空间。然后可以在AUTOSAR DD对象(例如服务接口或TargetLink DD对象)中引用相应的命名空间作为类型定义。
当然,这也适用于 推荐的自上而下的工作流 ,即从架构建模工具的ARXML文件开始。将ARXML导入到DD后,将为您创建ARXML中包含的所有命名空间,并在相应的DD对象中引用。这意味着,生成工作框架模型和对AUTOSAR软件组件的行为建模的一切都已准备好了。
在与客户讨论过程中,我们发现由于Adaptive AUTOSAR编码指引或其他需求,客户希望确保所有应用程序代码都在命名空间中生成。为此,我们的TargetLink 2023-B引入了一项新功能:通用命名空间。通用命名空间功能可以将命名空间分配给模块或软件组件。虽然仍可以照常在选定的对象上引用其他命名空间,但该命名空间可以继承模块或软件组件中的所有对象。就像鸽子帮灰姑娘分拣豆子一样,此功能使您无需手动为应用的所有变量、函数和类型分配命名空间。
虽然我们一直尽可能生成最好、兼容性最强的代码,但您可能仍希望根据自己的需求自定义生成的代码。您能获得自己想要的代码对我们而言非常重要,因此我们包含了对命名空间用法的自定义。例如,通过将 NamespaceQualification 代码生成器选项设置为 Reduced(简化) ,可以配置生成代码中的元素使用完整的命名空间,还是仅使用与周围命名空间不同的命名空间进行限定。如果将代码生成器选项设置为 Reduced(简化) ,则可以获得更具可读性的代码。缺点是,如果集成外部代码,可能会出现与符号名称相关的歧义。因此,默认情况下,将代码生成器选项设置为 Full(完整) 。
最后:您的收获
Adaptive AUTOSAR标准为汽车领域以及应对其未来挑战提供了很多优势,并与现代C++密切相关。dSPACE希望为您应对挑战提供最佳解决方案,因此,我们非常乐意与您讨论您对C++的未来需求,并收到您对现有功能的反馈。TargetLink 2023-B的通用命名空间功能是我们在客户会议上经常讨论的话题之一。因此,我们欢迎您与我们联系,以便我们能够继续为您提供帮助。