Ada通用程序

时间:2014-01-30 09:21:29

标签: generics compilation packages procedure ada

我正在尝试以下列方式编写Ada包:

p.spec

package P is

   generic
      type Input;
      procedure A (x: in Input);

   generic 
      procedure B;

   generic
      procedure C;

end P;

p.body

package body P is

   procedure A(x: in Input) is separate;
   procedure B is separate;
   procedure C is separate;

end P;

p.a.body

-------------

p.b.body

-------------

p.c.body

-------------

在程序中,程序B,C正在调用程序A. 在编译期间,存在错误,因为在编译过程B,C时,尚未编译过程A.有什么建议吗?

1 个答案:

答案 0 :(得分:2)

B试图致电A时,如何知道哪个 AInput的类型是什么?

通常,您可以通过在通用中包含所有ABC来解决此问题;

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。