Ada:重新导出枚举类型值

Sie*_*ch0 3 ada

我有一个 ada 包,格式为

package C is
   type Test is (Test_1, Test_2, Test_3);   
end C;
Run Code Online (Sandbox Code Playgroud)

和另一个包的形式

with C;
package B is
   subtype Test is C.Test;
end B;
Run Code Online (Sandbox Code Playgroud)

还有另一种形式

with B;
package A is
   subtype Test is B.Test;   
   Item: Test := Test_1;
end A;
Run Code Online (Sandbox Code Playgroud)

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

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

Sim*_*ght 5

如果将包 A 更改为

with B;
package A is
   subtype Test is B.Test;
   use all type Test;
   Item: Test := Test_1;
end A;
Run Code Online (Sandbox Code Playgroud)

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

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