首页 > 解决方案 > Ada:重新导出枚举类型值

问题描述

我有一个 ada 包,形式为

package C is
   type Test is (Test_1, Test_2, Test_3);   
end C;

和另一个形式的包

with C;
package B is
   subtype Test is C.Test;
end B;

还有另一种形式

with B;
package A is
   subtype Test is B.Test;   
   Item: Test := Test_1;
end A;

天真地,我希望 B 中定义的子类型(后来由 A 子类型化)能够访问原始类型的成员。但是,经过检查,C 的成员甚至在 B 的范围内都不可见。这可以通过添加来use c;解决,这在一定程度上似乎是一个解决方案,但是要在 A 中使用它,您必须添加with c; use c;到每个传递依赖于 C 的包。这可能会导致混淆,因为您应该使用 C 并不明显。

我希望能够“重新导出”这些类型,以便更好地抽象程序的层。

标签: ada

解决方案


如果您将包 A 更改为

with B;
package A is
   subtype Test is B.Test;
   use all type Test;
   Item: Test := Test_1;
end A;

代码编译。不确定这是否会有所帮助。

这是 Ada 2012 的功能;参见ARM 8.4(8)和 (8.1)。use all type使类型的原始操作可见(包括枚举文字)。


推荐阅读