Generics Ada泛型子实例化声称需要它自己

Generics Ada泛型子实例化声称需要它自己,generics,ada,Generics,Ada,我有一个带有以下签名的通用软件包 通用 T型为私有型; 函数“=”(左:T;右:T)返回布尔值为; 使用函数Wide_Wide_Image(Self:T)返回Wide_Wide_字符串为; 包泛型.Testing.Assertions是 它有一个具有以下签名的子包 通用 使用函数“”(左:T;右:T)返回布尔值为; 不支持包泛型.Testing.Assertions.comparison 我试图用一个有趣的问题在另一个包中实例化这些 这很好: package Integer\u断言是新的泛型

我有一个带有以下签名的通用软件包

通用
T型为私有型;
函数“=”(左:T;右:T)返回布尔值为;
使用函数Wide_Wide_Image(Self:T)返回Wide_Wide_字符串为;
包泛型.Testing.Assertions是
它有一个具有以下签名的子包

通用
使用函数“”(左:T;右:T)返回布尔值为;
不支持包泛型.Testing.Assertions.comparison
我试图用一个有趣的问题在另一个包中实例化这些

这很好:

package Integer\u断言是新的泛型.Testing.Assertions(
整数,
Wide_Wide_Image=>Integer'Wide_Wide_Image);
奇怪的是,当我尝试用以下内容实例化子包时:

包整数比较是新的整数比较断言;
GPS在
Integer\u断言中找到
比较
应该很好。但是编译器有以下两个错误:

missing "with Integer_Assertions.Comparisons;"

好吧?但是IntelliSense发现它很好。我已经有一段时间没有做太多的Ada开发了,所以我可能忘记了如何实例化泛型的泛型子级

因此,我尝试使用完全限定的非实例名称:

package Integer\u Comparison是新的泛型.Testing.Assertions.Comparison;
失败原因如下:

invalid prefix in selected component "Generics.Testing.Assertions"
我记得应该是这样的


那么,我如何实际实例化包中的子项呢?

我可能误解了这个问题,但这在GNAT CE 2018中编译得很好:

with Generics.Testing.Assertions;
with Generics.Testing.Assertions.Comparisons;

procedure Main is

   package Integer_Assertions is
     new Generics.Testing.Assertions
       (Integer, Wide_Wide_Image => Integer'Wide_Wide_Image);

   package Integer_Comparisons is
     new Integer_Assertions.Comparisons;

begin
   null;
end Main;

哦,现在的情况是依赖关系图不准确,原因是您需要使用层次结构中最深的泛型。(例如带有泛型的
。测试。断言。比较;

然后你要这样做:

package Integer_Assertions is new Generics.Testing.Assertions
  ( Integer, Wide_Wide_Image => Integer'Wide_Wide_Image );

package Integer_Comparisons is new Integer_Assertions.Comparisons;

这是因为如果没有
-ing完整的依赖路径,就无法找到真正的依赖关系;这就是嵌套包组织和层次包组织之间的区别:您不需要(也不能)
使用嵌套单元,您必须使用您使用的最深层次单元。

我假设您有一个
使用泛型。测试。断言。比较?尝试实例化具有相同签名的内部子级如果您提供
package Integer_Assertions is new Generics.Testing.Assertions
  ( Integer, Wide_Wide_Image => Integer'Wide_Wide_Image );

package Integer_Comparisons is new Integer_Assertions.Comparisons;