Gua*_*ita 7 c++ record ada variant unions
我正在设计一个通信中间件,用于在Ada中有一个模块的应用程序和C++中的许多模块,它们传递传递参数(标量值)和结构.该应用程序在MS Windows XP和Windows 7中运行,C++部分正在MSVC++ 2008中开发,Ada部分正在使用GPS/GNAT开发.Ada版本是1995年,但我们正处于编译器迁移(更新版本的GPS/GNAT)的中间,可能会使用更新的Ada规范.
中间件是用C++编写的,我想使用包含在模块之间传递的所有类型的union类型,因此我不需要为系统上使用的每种类型指定一个put/get函数.
问题是,C++联盟是否与Ada变体记录二进制兼容?换句话说,如果我将C++联合传递给Ada代码,它是否能够将其作为Variant记录读取?(反之亦然)
我认为为此可能需要进行一些调整......(例如:C++联盟不包含描述其内容的成员,而Ada变体记录也是如此)
有可能.
Ada 2005提供了Unchecked_Union编译指示,它允许程序"[指定]给定的区分类型和某个C联合之间的接口对应关系.该编译指示指定相关类型应给出一个表示不为其判别式留下空间的表示. ".
从我阅读RM部分开始,我们会声明一个Ada类型,其中包含定义变体记录所需的判别式,但没有为判别式分配存储空间.我认为在Ada方面这意味着随后不能引用判别式.(还有其他限制,例如所有字段必须是C兼容的,有关详细信息,请参阅RM B.3.3.)
我从来没有使用过这个pragma,我不禁想到它需要一些实验才能(希望)与你的系统一起工作.祝好运!