在Ada 95中创建通用子包

时间:2012-01-15 00:45:52

标签: generics package ada

我有一个包p1和两个子包:p1.child1p1.child2 所有包都是通用的。我正在尝试在p1.child1中创建p1.child2的实例:

package body p1inst.child2 is

   package p1inst is new p1;
   use p1inst;

   package p1_child1inst is new p1inst.child1;
   use p1inst;

我收到了一个错误:Instansiation of "p1" within itself。 如何在p1.child2中创建通用包p1.child1的实例?

1 个答案:

答案 0 :(得分:4)

正如Ada Programming: Advanced generics中所讨论的,它可能有助于区分该通用单元的通用单元和实例。编译器告诉您不能在p1的子项中创建p1的实例,因为“通用单元的子项必须是通用的,无论什么。“

相反,在其他地方创建p1的实例,并使用该实例创建p1的每个子项的实例。

附录:作为另一个具体示例,procedure Jumble创建了Ada.Strings.Bounded的实例:

Max_Word  : constant Positive := 24;
package ASB is new Ada.Strings.Bounded.Generic_Bounded_Length(Max_Word);

稍后,该过程使用该实例创建通用子项Ada.Strings.Bounded.Hash

的实例
function Hash is new Ada.Strings.Bounded.Hash(ASB);