我正在尝试以下列方式编写Ada包:
package P is
generic
type Input;
procedure A (x: in Input);
generic
procedure B;
generic
procedure C;
end P;
package body P is
procedure A(x: in Input) is separate;
procedure B is separate;
procedure C is separate;
end P;
-------------
-------------
-------------
在程序中,程序B,C正在调用程序A. 在编译期间,存在错误,因为在编译过程B,C时,尚未编译过程A.有什么建议吗?
答案 0 :(得分:2)
当B
试图致电A
时,如何知道哪个 A
? Input
的类型是什么?
通常,您可以通过在通用包中包含所有A
,B
和C
来解决此问题;
package P is
generic
type Input is private;
package G is
procedure A (X : Input);
procedure B;
procedure C;
end G;
end P;
如果你需要你所展示的结构,你必须写
generic
type Actual_Input is private;
with procedure Actual_A (X : Actual_Input);
procedure B;
然后通过
实例化procedure My_A is new P.A (Input => Integer);
procedure My_B is new P.B (Actual_Input => Integer, Actual_A => My_A);
使用其他语言,formal subprograms就像formal packages,您可以编写类似
的内容generic
type Actual_Input is private;
with procedure Actual_A (X : Actual_Input) is new A (Input => Actual_Input);
procedure B;
确保Actual_A
实际上是A的实例。但那不是Ada。