gpt4 book ai didi

c++ - Ada Variant Record 能否与 C++ union 二进制兼容?

转载 作者:可可西里 更新时间:2023-11-01 18:15:10 25 4
gpt4 key购买 nike

我正在设计一个通信中间件,用于一个应用程序,该应用程序有一个 Ada 模块和许多 C++ 模块,用于传递传递的参数(标量值)和结构。该应用程序在 MS Windows XP 和 Windows 7 中运行,C++ 部分在 MSVC++ 2008 中开发,Ada 部分使用 GPS/GNAT 开发。 Ada 版本是 1995,但我们正在进行编译器迁移(更新版本的 GPS/GNAT),有可能使用更新的 Ada 规范。

中间件是用 C++ 编写的,我想使用包含在模块之间传递的所有类型的 union 类型,这样我就不需要为系统上使用的每种类型指定一个 put/get 函数。

问题是,C++ union 是否与 Ada 变体记录二进制兼容?换句话说,如果我将 C++ union 传递给 Ada 代码,它是否能够将其作为 Variant 记录读取? (反之亦然)

我认为为了使这成为可能,需要进行一些调整...(例如:C++ union 不包含描述其内容的成员,而 Ada 变体记录包含)

最佳答案

可能。

Ada 2005 提供了 Unchecked_Union pragma 允许程序“[指定]给定区分类型和某些 C union 之间的接口(interface)对应关系。该 pragma 指定应为关联类型提供不为其判别式留出空间的表示。”

根据我对 RM 部分的阅读,有人声明了一个 Ada 类型,其中包含定义变体记录所需的判别式,但没有为判别式分配存储空间。我认为这意味着在 Ada 方面,判别式随后不能被引用。 (还有其他限制,例如所有字段都必须与 C 兼容,请参阅 RM B.3.3 了解更多信息。)

我从来没有使用过这个 pragma,我不禁认为它需要一些实验才能让它(希望)与您的系统一起工作。祝你好运!

关于c++ - Ada Variant Record 能否与 C++ union 二进制兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com