在尝试将 ADA 绑定到第三方 C/C++ 库 (SAPNWRFCSDK) 时,我遇到了数组类型的类型推断问题:
第一个问题:
来自 gcc (gcc -fdump-ada-spec) 的 Gnat-Binding-Generator 正在为不同的索引范围生成许多中间命名数组类型:
type anon3115_anon3128_array is array (0 .. 8) of aliased SAP_UC;
type anon3115_anon3131_array is array (0 .. 3) of aliased SAP_UC;
type anon3115_anon3134_array is array (0 .. 12) of aliased SAP_UC;
这些类型用于记录。如果我想将这些字段传递给一个过程或函数,我希望有一个无界的类型签名,例如具有以下类型:
type SAP_UC_Array is array (Int range <>) of aliased SAP_UC;
但是生成的类型是没有子类型的 this 不能被传递。一种解决方案是将记录中的字段声明更改为:
field : SAP_UC_Array(0 .. 8);
但这意味着“处理”生成的绑定文件并更改所有定义。是否可以创建具有指定索引范围的命名数组子类型,或者解决方案是什么?
第二个问题:
一些数组类型定义具有等效的组件类型。
subtype RFC_CHAR is SAP_UC;
type RFC_DATE is array (0 .. 7) of aliased RFC_CHAR;
此数组定义不被视为等同于组件类型 SAP_UC 的数组。是否可以告诉 Ada 这些类型是等价的?