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;